日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

移动app测试的多样性_快速搞定APP移动端自动化测试

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动app测试的多样性_快速搞定APP移动端自动化测试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 何為數(shù)據(jù)驅(qū)動

什么是參數(shù)化?什么又是數(shù)據(jù)驅(qū)動?經(jīng)常有人會搞不明白他們的關(guān)系,淺談一下個人的理解,先來看兩個測試中最常見的場景:

登錄:不同的用戶名,不同的密碼,不同的組合都需要做登錄場景的測試,正常的排列組合下可能會產(chǎn)生多個用例

搜索:不同的搜索條件產(chǎn)生不同的搜索結(jié)果,搜索也是常見的測試項,單個搜索參數(shù)或者多種搜索參數(shù)的組合;同樣也會產(chǎn)生多個用例。

以上兩種場景都有一個共同點,就是測試的執(zhí)行步驟不變,變的只是輸入的測試數(shù)據(jù),那么引出兩個概念——參數(shù)化和數(shù)據(jù)驅(qū)動

參數(shù)化:我們在寫自動化用例的時候會有很多方法,一般我們都會把數(shù)據(jù)通過參數(shù)來傳遞給方法,而不會直接在方法中寫“死”,所以方法之間的數(shù)據(jù)傳遞都是通過參數(shù)化來進行,利用參數(shù)化進行數(shù)據(jù)與變量的對應(yīng);比如我們的登錄賬號密碼設(shè)置在參數(shù)中,再將參數(shù)傳遞到方法中。

public MainPage login(String username, String password) { sendKeys(inputUsername,username); sendKeys(inputPassword,password); click(loginBtn); return new MainPage();}

數(shù)據(jù)驅(qū)動:將參數(shù)化中的數(shù)據(jù)來源變成從外部讀取,參數(shù)有一個存放數(shù)據(jù)的地方,在用例執(zhí)行的時候去去數(shù)據(jù);這個數(shù)據(jù)存儲的地方可以是我們定義的數(shù)組、hashmap,也可以是從外部文件中(excel、csv、xml、yaml等)讀取。

例如上述的搜索案例,我們可以將搜索條件放入外部文件中,每次執(zhí)行搜索用例時,去文件中獲取數(shù)據(jù),根據(jù)獲取到的數(shù)據(jù)執(zhí)行不同的搜索測試即可。

- - 洗衣液- - 帽子- - 手套

總結(jié)下來

數(shù)據(jù)驅(qū)動為自動化測試框架的一種設(shè)計思想,而參數(shù)化是實現(xiàn)數(shù)據(jù)驅(qū)動的一種手段,我們利用參數(shù)化來完成數(shù)據(jù)驅(qū)動,從而將數(shù)據(jù)與腳本分離,增加了框架的可維護性和腳本的復(fù)用性。

2. 為什么要做數(shù)據(jù)驅(qū)動

2.1 測試數(shù)據(jù)

在執(zhí)行測試工作過程中,有很多過程是需要動態(tài)變化的,如果每一次的變化都需要編碼部署,那么整個執(zhí)行的流程就會邊長;

對于業(yè)務(wù)測試工程師來說,維護自動化代碼有一定的門檻,需要熟悉編程語言和測試框架的結(jié)構(gòu);

定義好了數(shù)據(jù)驅(qū)動,將變化的數(shù)據(jù)放入配置文件中進行維護,既便捷(無需找到對應(yīng)代碼修改部署),也降低了維護的門檻(業(yè)務(wù)測試只需要在配置文件中修改數(shù)據(jù)即可)

2.2 測試步驟

與測試數(shù)據(jù)的數(shù)據(jù)驅(qū)動大致相同,主要也是方便業(yè)務(wù)測試維護,降低維護門檻和代碼修改部署出錯的風(fēng)險;修改配置文件,整個業(yè)務(wù)行為和抽象是不用改變的,當(dāng)然,在UI自動化中配合PO一起使用會“風(fēng)味更佳”。

2.3 動態(tài)生成測試步驟

手工錄制測試步驟,直接生成代碼比較困難,可以生成步驟的配置文件,讓代碼去讀配置文件,完成自動化的回放;(此方面本人暫時僅了解過,還未實踐落地,理論上是可以實現(xiàn)的。)

3. 在哪里做數(shù)據(jù)驅(qū)動

3.1 不要在哪里做數(shù)據(jù)驅(qū)動

不要在測試用例內(nèi)完成大量的數(shù)據(jù)驅(qū)動:用例通過PO的調(diào)用是能夠非常清晰展現(xiàn)出業(yè)務(wù)執(zhí)行場景的,業(yè)務(wù)才是用例的核心;一旦在用例里使用了大量數(shù)據(jù)驅(qū)動,如調(diào)用各種yaml、csv等數(shù)據(jù)文件,會造成用例可讀性變差,維護復(fù)雜度變高;

3.2 可以在哪里做數(shù)據(jù)驅(qū)動

1. 測試數(shù)據(jù)的數(shù)據(jù)驅(qū)動

2. 測試步驟的數(shù)據(jù)驅(qū)動

  • 定位符
  • 行為流

3. 斷言的數(shù)據(jù)驅(qū)動

4. 如何做數(shù)據(jù)驅(qū)動

4.1 數(shù)據(jù)格式的選擇

我們要將數(shù)據(jù)存入文件中,不同的文件有著不同的數(shù)據(jù)格式,那么作何選擇呢?

  • 不同數(shù)據(jù)格式文件的對比

從上述對比結(jié)果中,Json 和 YAML 對于數(shù)據(jù)結(jié)構(gòu)的支持和書寫程度是較好的;但是, YAML 的寫法更簡潔,并且還可以注釋,因此最推薦使用的就是(從表格中的所處都位置也可猜到~)…位于C位的YAML!

那么到底什么是YAML,又如何使用,下面簡單來了解一下

4.2 YAML 文件的使用

yaml 的語法

  • 大小寫敏感
  • 使用縮進表示層級關(guān)系
  • 縮進時不允許使用Tab鍵,只允許使用空格。
  • 縮進的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
  • # 表示注釋

yaml 支持的三種數(shù)據(jù)結(jié)構(gòu)

  • 純量(scalars):單個的、不可再分的值,例如數(shù)字、字符串、布爾值等
  • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
#鍵值對形式key: value#行內(nèi)對象person: { name: allen, age: 25 }
  • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
#以-開頭表示為一個數(shù)組里的值- A- B- C#數(shù)組內(nèi)嵌套子數(shù)組,用一個空格縮進表示- - a - aa- - b - bb
  • 對象和數(shù)組可以結(jié)合使用,形成復(fù)合結(jié)構(gòu)
languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org

4.3 數(shù)據(jù)讀取-jackson

既然有了數(shù)據(jù)存儲的地方,那么就要對數(shù)據(jù)進行讀取,這里就要介紹另一位幫手,Java的jackson庫

jackson是Java的一個庫,用的最多的是jackson-databind和jackson-dataformats-text,分別用來處理json和yaml數(shù)據(jù)格式,它可以將文件中的數(shù)據(jù)和Java中的對象建立一種映射關(guān)系,

把一個文件數(shù)據(jù)通過類型建立關(guān)聯(lián),并創(chuàng)建出一個類的實例,反之也可以把一個對象寫入文件中。

4.3.1 jackson-databind

先來看jackson-databind對json文件的操作

添加 maven 依賴

com.fasterxml.jackson.core jackson-databind 2.9.9.3
  • 寫 json 文件

1)先創(chuàng)建一個類,包含變量name,age

public class TestFileSource { public String name; public int age; }

2)創(chuàng)建單元測試,創(chuàng)建ObjectMapper對象,調(diào)用writeValue對json文件進行寫操作

@Testvoid writeJson() throws IOException { ObjectMapper mapper = new ObjectMapper(); TestFileSource testFileSource = new TestFileSource(); mapper.writeValue(new File("..demo.json"),testFileSource);}

3)得到demo.json文件的結(jié)果,從結(jié)果可以看到TestFileSource類中的變量已經(jīng)被寫入的json文件中

{"name":null,"age":0}
  • 讀 json 文件

1)創(chuàng)建單元測試,創(chuàng)建ObjectMapper對象,調(diào)用readValue方法對json文件進行數(shù)據(jù)讀取

@Testvoid readJson() throws IOException { ObjectMapper mapper = new ObjectMapper(); TestFileSource testFileSource = mapper.readValue(TestFileSource.class.getResourceAsStream("/demo.json"), TestFileSource.class); System.out.println(testFileSource); System.out.println(testFileSource.age);}

2)讀取結(jié)果

ApiDemos.testcase.TestFileSource@4562e04d 0
  • 輸出漂亮的 json 格式

1)創(chuàng)建單元測試,創(chuàng)建ObjectMapper對象,調(diào)用writerWithDefaultPrettyPrinter().writeValueAsString方法可對指定對象進行json數(shù)據(jù)格式的輸出

@Testvoid prettyPrintJson() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); // pretty print String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new TestFileSource()); System.out.println(json);}

2)打印結(jié)果

{ "name" : null, "age" : 0}

參考鏈接jackson-databind GitHub地址:

https://github.com/FasterXML/jackson-databind

4.3.2 jackson-dataformats-text

再來看jackson-dataformats-text,這是一個可以對YAML、CSV、Properties和XML文件進行操作的庫,也是目前最常用的,不過這里我們只重點關(guān)注其對YAML文件的操作

  • 添加maven依賴
com.fasterxml.jackson.dataformat jackson-dataformat-yaml 2.9.8
  • 讀 YAML 文件

想要讀取 YAML 文件,最主要的是在new ObjectMapper對象的時候加入new YAMLFactory(),這樣就成功切換至 yaml 操作的狀態(tài),然后利用readValue方法就可以完成對yaml文件的數(shù)據(jù)讀取了

1)創(chuàng)建 YAML 文件

name: allenage: 11

2)創(chuàng)建ObjectMapper對象,設(shè)置new YAMLFactory()

@Testvoid readYaml() throws IOException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); TestFileSource testFileSource = mapper.readValue(TestFileSource.class.getResourceAsStream("/demo2.yaml"), TestFileSource.class); System.out.println(testFileSource); System.out.println(testFileSource.age);}

打印結(jié)果

ApiDemos.testcase.TestFileSource@ba2f4ec11

在readValue的方法中可以看到,第一個參數(shù)填的是文件地址,第二個參數(shù)就是精髓所在!我們可以給定一個對象類型,或者一個二維數(shù)組等,用來產(chǎn)生映射關(guān)系,將文件數(shù)據(jù)和我們的對象綁定,方便數(shù)據(jù)的讀取。

如上述例子中我們通過TestFileSource的實例化對象來調(diào)用age變量。

  • 輸出漂亮的 YAML 格式

與json輸出的方式基本一致,只需要在new ObjectMapper對象的時候加入new YAMLFactory()即可1)創(chuàng)建類和類的成員變量,包含純量、數(shù)組和哈希

public class TestFileSource { public String name = "tester"; public int age = 2; public Object[][] arr= {{1,2,3,},{"a","b","c"}}; public HashMap map = new HashMap(){ { put("name","tester"); put("sex","男"); } };}

2)創(chuàng)建單元測試,創(chuàng)建ObjectMapper對象,加入new YAMLFactory() 參數(shù),調(diào)用writerWithDefaultPrettyPrinter().writeValueAsString方法可對指定對象進行yaml數(shù)據(jù)格式的輸出

@Testvoid prettyPrintYaml() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // pretty print String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new TestFileSource()); System.out.println(json);}

3)打印結(jié)果

---name: "tester"age: 2arr:- - 1 - 2 - 3- - "a" - "b" - "c"map: sex: "男" name: "tester"

(文章來源于霍格沃茲測試學(xué)院)

總結(jié)

以上是生活随笔為你收集整理的移动app测试的多样性_快速搞定APP移动端自动化测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。