以login_test.py登錄接口為例:
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseLogin(HttpRunner):
config = Config('hrun3_demo').base_url('http://xxx:80').export(*['vars_name'])
teststeps = [
Step(
RunRequest('login')
.post('/xxx/login.html')
.with_headers(**{'X-Requested-With': 'XMLHttpRequest'})
.with_data({'accounts':'ss','pwd':'123456'})
.extract()
.with_jmespath('body.msg','value_msg')
.validate()
.assert_equal('body.msg','登錄成功')
.assert_equal('body.code',0)
)
]
if __name__ == '__main__':
TestCaseLogin().test_start()
模塊引用
每個 case 文件必須要有的
from httprunner import HttpRunner, Config, Step, RunRequest
父類HttpRunner
每個 testcase都是HttpRunner的子類,在類名后面必須寫HttpRunner
class TestCaseLogin(HttpRunner):
類屬性
每個 testcase必須要有兩個類屬性config teststeps
一.config
配置測試用例級別的設(shè)置
config = Config('hrun3_demo')
.name(必填)
指定測試用例名稱。這將顯示在執(zhí)行日志和測試報告中。
.base_url(可選)
指定SUT的通用架構(gòu)和主機部分,例如https://postman-echo.com。如果base_url指定,則teststep中的url只能設(shè)置相對路徑部分。如果要在不同的SUT環(huán)境之間切換,這將特別有用。
.variables(可選)
指定測試用例的公共變量。每個測試步驟都可以引用未在步驟變量中設(shè)置的配置變量。換句話說,步驟變量比配置變量具有更高的優(yōu)先級。
.verify (可選)
指定是否驗證服務(wù)器的TLS證書。如果我們想記錄測試用例執(zhí)行的HTTP流量,這將特別有用,因為如果沒有設(shè)置verify或?qū)⑵湓O(shè)置為True,則會發(fā)生SSLError。
SSLError(SSLCertVerificationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]證書驗證失?。鹤C書鏈中的自簽名證書(_ssl.c:1076)')
.export (可選)
指定導(dǎo)出的測試用例會話變量。將每個測試用例視為一個黑盒,config variables是輸入部分,而config export是輸出部分。特別是,當(dāng)一個測試用例在另一個測試用例的步驟中被引用,并且將被提取一些會話變量以在后續(xù)測試步驟中使用時,則提取的會話變量應(yīng)在配置export部分中進行配置。將測試用例的某些變量指定為全局變量。(PS:不配置export在另一個引用類中進行該累的變量調(diào)用時,直接export也是可以的,最好還是配置一下)
二. teststeps
teststeps 下有兩種情況RunRequest和RunTestCase
teststeps = [
Step(
RunTestCase('引用登錄 login_test')
.call(TestCaseLogin)
.export(*['value_msg'])
),
Step(
RunRequest('加入購物車')
.post('/xxxt/save.html')
.with_headers(**{'X-Requested-With': 'XMLHttpRequest'})
.with_data({'goods_id': '5', 'stock': "1"})
.extract()
.with_jmespath('body','value_msg')
.validate()
.assert_equal('body.msg','加入成功')
.assert_equal('body.code',0)
)
1.RunRequest
RunRequest 在一個步驟中用于向API發(fā)出請求,并對響應(yīng)進行一些提取或驗證。
.name
RunRequest 的參數(shù)用于指定測試步驟名稱,該名稱將顯示在執(zhí)行日志和測試報告中。
.with_variables
指定測試步驟變量。每個步驟的變量都是獨立的,因此,如果要在多個步驟中共享變量,則應(yīng)在配置變量中定義變量。此外,步驟變量將覆蓋配置變量中具有相同名稱的變量。(PS:注意參數(shù)傳遞的格式使用**{},使用關(guān)鍵字參數(shù)解包的方式進行參數(shù)傳遞給with_variables),參數(shù)引用使用"$變量名",如果是函數(shù)引用使用"${函數(shù)名()}"
method(url)
指定HTTP方法和SUT的URL。這些對應(yīng)于method和url參數(shù)requests.request。
如果base_url在config中設(shè)置,則url只能設(shè)置相對路徑部分。如果在Config中設(shè)置了baseurl,method中只能設(shè)置相對路徑,可選參數(shù)為get/post/put/delete/等。
如.post('http:xxx/login.html')
.with_params
指定請求網(wǎng)址的查詢字符串。這對應(yīng)于的params參數(shù)requests.request。
.with_headers
為請求指定HTTP標(biāo)頭。這對應(yīng)于的headers參數(shù)requests.request。
.with_cookies
指定HTTP請求cookie。這對應(yīng)于的cookies參數(shù)requests.request。
.with_data
指定HTTP請求正文。這對應(yīng)于的data參數(shù)requests.request。
.with_json
在json中指定HTTP請求正文。這對應(yīng)于的json參數(shù)requests.request。
.extract()(數(shù)據(jù)提?。?/h5>
.with_jmespath
使用jmespath提取JSON響應(yīng)主體。
with_jmespath(jmes_path:文字,var_name:文字)
- jmes_path:jmespath表達式,有關(guān)更多詳細信息,請參考JMESPath教程
- var_name:存儲提取值的變量名,可以在后續(xù)測試步驟中引用它
.validate()
.assert_xxx
使用jmespath提取JSON響應(yīng)主體并使用期望值進行驗證。
assert_XXX(jmes_path:文本,期望值:任何,消息:文本=“”)
2.RunTestCase(名稱)
RunTestCase 在一個步驟中用于引用另一個測試用例調(diào)用。
teststeps = [
Step(
RunTestCase('關(guān)聯(lián) login_test')
.call(TestCaseLogin)# 引用TestCaseLogin
.export(*['value_msg'])
)
Step(
)]
.name
RunTestCase 的參數(shù)用于指定測試步驟名稱,該名稱將顯示在執(zhí)行日志和測試報告中。
.with_variables
指定測試步驟變量。每個步驟的變量都是獨立的,因此,如果要在多個步驟中共享變量,則應(yīng)在配置變量中定義變量。此外,步驟變量將覆蓋配置變量中具有相同名稱的變量。
.call
指定引用的測試用例類。你在引用另一個測試用例的step中的參數(shù)時,需要先指定引用的測試用例類
.export
指定會話變量名稱以從引用的測試用例中導(dǎo)出。導(dǎo)出的變量可以通過后續(xù)測試步驟step進行引用。導(dǎo)出的是step中的jmespath提取的變量,export之后,這個變量是全局變量,但是不能再confg中進行設(shè)置,因為測試類的引用是在step中進行的,而類的初始化是先初始化config,然后初始化teststeps,所以參數(shù)的傳遞在step之間