在用例的config中,我們可以配置測(cè)試用例級(jí)別的一些設(shè)置依啰,比如base_url
丐黄、驗(yàn)證、變量孔飒、導(dǎo)出。
from httprunner import HttpRunner, Config, Step, RunRequest
from utils.FakerData import *
from api.dlvopenapi import unified_order, order_query
from utils.SigleData import FakerSingleData
class TestCaseDlvOpenApiSuccess(HttpRunner):
config = (
Config("發(fā)放成功的測(cè)試案例")
.variables(
**{
"appId": "200803014515363414",
"accountName": get_name(),
"idCard": "420624199109037552",
"amount": "0.02",
"signType":"rsa2",
"version":"1.0",
"accountNo": "6225380092315252",
"phone":get_phone(),
"serviceCompanyId": "10000032",
"key": "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOI4fc5POr0cZmyyGuw"
}
)
.base_url("http://192.168.1.92:11958")
.verify(False)
.export( *["reqNo", "outOrderNo"])
)
teststeps = [
Step(
RunRequest("發(fā)放收單成功").
setup_hook('${setup_request($request,$key)}')
.with_variables(
**{
"attach": "附件",
"bank": "ICBC1",
"batchNo": "20200801",
"depositBank": "工商",
"extInfo": "API001-商戶004-攻城獅",
"foreignNationality": "CN",
"memo": "API_AUTO1",
"outOrderNo": get_outOrderNo(),
"personalIncomeTax": "0",
"phone": "$phone",
"postId": "10468",
"postName": "tester",
"serviceFee": "0",
"serviceType": "10002",
"shouldAmount": "0",
"totalFee": "0",
"nonce": get_nonce(),
"timestamp": get_current_time()}
)
.post(unified_order.UnifiedOrderApi.path)
.with_json(unified_order.UnifiedOrderApi.json)
.teardown_hook('${polling_assert(state_,30)}')
.extract()
.with_jmespath("body.data.reqNo", "reqNo")
.with_jmespath("body.data.outOrderNo", "outOrderNo")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.code", "0000")
.assert_equal("body.msg", "處理成功")
.assert_equal('${db_filed_states_with_parm(state_)}', 30)
.assert_equal('${db_filed_states_with_parm(balance_state_)}', 39)
.assert_equal('${db_filed_states_with_parm(channel_balance_state_)}', 39)
),
Step(
RunRequest("發(fā)放訂單查詢")
.setup_hook('${setup_request($request,$key)}')
.with_variables(**{
"method": "ayg.salary.payQuery",
"nonce": get_nonce(),
"timestamp": get_current_time(),
})
.post(order_query.OrderQueryApi.path)
.with_json(order_query.OrderQueryApi.json)
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.code", "0000")
.assert_equal("body.data.code", "30")
.assert_equal("body.data.msg", "支付成功")
)
]
if __name__ == "__main__":
TestCaseDlvOpenApiSuccess().test_start()
name(必填)
測(cè)試用例的名稱艰争,必填項(xiàng)坏瞄,將顯示在執(zhí)行日志和測(cè)試報(bào)告中。
base_url(選填)
這個(gè)配置通常在多環(huán)境切換中最常用甩卓。結(jié)合.env
文件或者環(huán)境變量
實(shí)現(xiàn)多環(huán)境切換
variables(選填)
全局變量variables(**{})
鸠匀,存放一些公共的變量,可以在整個(gè)測(cè)試用例里引用逾柿。與之對(duì)應(yīng)的是Step
中的局部(步驟)變量.with_variables(**{})
缀棍。
- 比如公共變量用戶名
username
,而且后面的每一個(gè)Step
都會(huì)用到這個(gè)參數(shù)机错,那么username
就可以放在config
的公共變量里爬范。 -
Step
里的變量?jī)?yōu)先級(jí)是比config
里的變量要高的,如果有2個(gè)同名的變量的話弱匪,那么引用的時(shí)候青瀑,是優(yōu)先引用步驟里的變量的。 - 寫在全局的變量可以通過
測(cè)試類對(duì)象.test_start()
的param
參數(shù)傳遞覆蓋,所以如果需要自定義覆蓋參數(shù),則需要把參數(shù)提到全局變量部分斥难。
verify(選填)
用來(lái)決定是否驗(yàn)證服務(wù)器TLS
證書的開關(guān)枝嘶。
通常設(shè)置為False
,當(dāng)請(qǐng)求https
請(qǐng)求時(shí)哑诊,就會(huì)跳過驗(yàn)證群扶。如果你運(yùn)行時(shí)候發(fā)現(xiàn)拋錯(cuò)SSLError
,可以檢查一下是不是verify
沒傳镀裤,或者設(shè)置了True
竞阐。
export(選填)
需要導(dǎo)出的變量,主要是用于不同case
的Step
之間參數(shù)的傳遞淹禾。還是以上面的代碼為例:
- 在第一個(gè)
Step
中馁菜,.extract()
提取了"body.data.reqNo"
給變量"reqNo"
,提取了"body.data.outOrderNo"
給變量"outOrderNo"
。
在
config
中配置export(*["reqNo","outOrderNo"])
這個(gè)變量铃岔。export中變量名應(yīng)該和第一步驟的變量名一致汪疮。(其實(shí)這邊所有的Step
都是RunRequest
型的,前面Step
中提取的變量無(wú)須export
也能被后面的Step
引用毁习,這個(gè)export
主要是用于此用例還需要被其他的用例引用的情況下(RunTestCase
)需要手動(dòng)在該用例下export
一下,方便后續(xù)使用)在第二個(gè)
Step
中智嚷,引用變量"reqNo","outOrderNo"
,需要加$