新聞中心
應(yīng)用場(chǎng)景

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、霸州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開(kāi)發(fā)、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為霸州等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
在API的測(cè)試中,有時(shí)候需求是對(duì)整個(gè)文件進(jìn)行檢驗(yàn)而不是某個(gè)特定的值,或者說(shuō)要對(duì)某個(gè)特定的值在不同的用例中重復(fù)地進(jìn)行驗(yàn)證。這種狀況下,我們最喜歡用的就是變量??梢源嫒⊥獠繑?shù)據(jù)或定義內(nèi)部變量,使代碼變得簡(jiǎn)潔、又有可閱讀性,同時(shí)測(cè)試用例結(jié)果運(yùn)行也能保持一致性。
學(xué)習(xí)要點(diǎn)
·如何讀取外部文件并進(jìn)行文件內(nèi)容的精確對(duì)比
·如何讀取外部文件并進(jìn)行文件內(nèi)容的模糊對(duì)比
·使用變量驗(yàn)證某個(gè)特定的value是否出現(xiàn)
·使用變量驗(yàn)證某個(gè)特定的key是否出現(xiàn)
示例中g(shù)et url: https://reqres.in/api/users/2
準(zhǔn)備工作
如果您想跟著以下示例操作,需要做好以下配置:
·測(cè)試框架: Java + Karate + Junit 5
·語(yǔ)言: Java, Cucumber
·IDE: Intellij IDEA
·項(xiàng)目類型: Maven
創(chuàng)建測(cè)試場(chǎng)景
1.創(chuàng)建feature文件: testvar-use.feature
2.創(chuàng)建用例
用例一:讀取外部文件并進(jìn)行文件內(nèi)容的精確對(duì)比
如下圖中測(cè)試場(chǎng)景:用例中發(fā)送了一個(gè)get的請(qǐng)求以后,期待回應(yīng)的代碼是200,并列出相應(yīng)的結(jié)果。代碼And match response == compareResponse 檢驗(yàn)返回的結(jié)果與期待的結(jié)果是否一致 。在Background中代碼:* def compareResponse = read('classpath:src/test/resource/comparedContent.json') 定義了變量compareResponse 是讀取的文件comparedContent.json的內(nèi)容。(注:* 符號(hào)實(shí)際上可以換作 Given, 讀取文件的路徑: classpath)
如下圖所示:comparedContent.json 內(nèi)容是與 get請(qǐng)求返回的結(jié)果一致的。(注: json文件內(nèi)容格式一定要正確,否則會(huì)出現(xiàn)讀取文件錯(cuò)誤的信息,參看常見(jiàn)錯(cuò)誤)
用例二:讀取外部文件并進(jìn)行文件內(nèi)容的模糊對(duì)比
代碼And match response == compareResponseIgnoreValue檢驗(yàn)返回的結(jié)果與期待的結(jié)果是否一致 。在Background中定義變量compareResponseIgnoreValue是讀取的文件comparedContentIgnoreValue.json。與上例中所不同的是期待文件內(nèi)容并不完全與返回的相一致。
在comparedContentIgnoreValue.json 中,與上一個(gè)用例對(duì)比,這里可以看到 "text": 的值換成了"#ignore",當(dāng)進(jìn)行對(duì)比時(shí),這個(gè)字段的內(nèi)容會(huì)忽略。
用例三:使用變量驗(yàn)證某個(gè)特定的value是否出現(xiàn)
在用例一、用例二中,同時(shí)出現(xiàn)了代碼:And match response.ad.url == adUrl , 這里的adUrl 實(shí)際就是Background 中自定義變量 * def adUrl = 'http://statuscode.org/' 。
用例四:使用變量驗(yàn)證某個(gè)特定的key是否出現(xiàn)
在下面的場(chǎng)景中,代碼And match response.ad.text != null 驗(yàn)證了返回結(jié)果中ad下text 字段必須存在。
下面兩行代碼先定義了一個(gè)變量notPresentedKey 并且賦予對(duì)應(yīng)的ad下keyNull的字段,然后再驗(yàn)證notPresentedKey 不存在。這里的變量是必需的,否則會(huì)出現(xiàn)找不到路徑錯(cuò)誤。(參看常見(jiàn)錯(cuò)誤)
這個(gè)變量不能放在Background 在本示例中,因?yàn)閞esponse是發(fā)送get請(qǐng)求以后返回的結(jié)果,如果放在Background中,response 還沒(méi)有返回,引用就會(huì)有錯(cuò)。(參看常見(jiàn)錯(cuò)誤)
* def notPresentedKey = response.ad.keyNull
And match notPresentedKey == null
常見(jiàn)錯(cuò)誤
1.文件讀取
用例一,用例二中,當(dāng)json文件內(nèi)容格式不正確時(shí),就會(huì)現(xiàn)如下運(yùn)行錯(cuò)誤:
2.不使用變量驗(yàn)證不存在的字段
在用例四中,如果直接用And match response.ad.keyNull == null, 會(huì)出現(xiàn)如下錯(cuò)誤信息,這是因?yàn)樵隍?yàn)證的時(shí)候,會(huì)先尋找對(duì)應(yīng)的路徑 ad.keyNull, 在返回的結(jié)果中是不存在ad.keyNull字段的。)
3.在Background中提前引用response
字段的匹配與寫(xiě)法
如下圖所示的正確Json文件格式,整個(gè)返回的內(nèi)容在karate中稱作 response。如果要想驗(yàn)證data下的id字段,就可以引用 response.data.id。這里做些補(bǔ)充以免有些初學(xué)不清楚如何引用字段(其實(shí)這也是我開(kāi)始學(xué)習(xí)時(shí)感到困惑的哦。)
結(jié)語(yǔ)
是不是變量特別好用啊,節(jié)省了很多寫(xiě)代碼的時(shí)間哦,可以看到定義在Background 中的變量看作是全局變量,可以用在任意一個(gè)場(chǎng)景中。在某個(gè)場(chǎng)景中定義的變量可以說(shuō)是局部變量。希望小伙伴們靈活靈用,為您的API 測(cè)試助力、加油。
網(wǎng)站欄目:測(cè)試高手進(jìn)階之路:接口測(cè)試用好“變量”,重復(fù)驗(yàn)證也不怕
本文URL:http://m.fisionsoft.com.cn/article/dpooegj.html


咨詢
建站咨詢
