网站建设日程表广州竞价托管
1.关联参数
如何将上一个登录接口返回的token传给下一个接口当做请求参数
参数关联场景:1.登录返回token->2.下一个接口头部传token
extract提取变量
&token引用变量config:name:get_joinbase_url:https://xx.xxx.xx.x:8001
teststeps:
-name:get_joinrequest:method:GETurl:/api/v1/goodsjson:username: 1password: 2extract:token:body.tokenvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]-name:get_userinforequest:method:POSTurl:/api/v1/goodsheaders:Authorization:Token $tokenjson:name:testsex:Mage:20mail:xxx@qq.comvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
2.环境变量
创建.env文件
base_url=http://
user=test
psw=123456床架yaml文件
config:name:get_joinbase_url:${ENV(base_url)}
teststeps:
-name:get_joinrequest:method:GETurl:/api/v1/goodsvariables:username: ${ENV(user)}password: ${ENV(psw)}extract:token:body.tokenvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
3.一个测试用例引用第二个测试用例
将登录用例设置成公共用例,其他用例执行前导入此用例
login_case.yamlconfig:name:登录expect:-token
teststeps:
-name:step-loginrequest:method:POSTheader:Content-type:url:https://data:username:adminpassword:"123456"extract:token:body.tokenvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
updata_info.yamlconfig:name:修改个人信息base_url:https://
teststeps:
-name:step-logintestcase:登录用例的性相对路径
-name:updata_inforequest:method:POSTheaders:Authorization:Token $tokenurl:api/v1/userinfodata:username:adminpassword:"123456"validate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
4.参数化和数据驱动
参数化是在parameters关键字
适用场景:搜索功能,步骤相同参数不同login_case.yamlconfig:name:登录base_url:https://variables:user:test1psw:"123456"parameters:#user:[test1,test2,test3,test4] #四个测试用例依次替换user user-psw:-[test1,123456]-[test2,123456]-[test3,123456]-[test4,123456]expect:-tokenteststeps:
-name:step-loginrequest:method:POSTheader:Content-type:url:pai/v1/logindata:username:adminpassword:"123456"extract:token:body.tokenvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
4.参数化引用CSV文件
(1)在yaml/json中直接指定参数列表
该种方式最简单,适合参数列表比较小的情况
(2)通过配置的parameterize函数引用CSV文件
该种方式需要准备csv数据文件,适合数据量比较大的情况
(3)调用debugtalk.py中自定义的函数生成参数列表
该种方式最为灵活,可通过自定义python函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要使用该方式
创建user_psw.csvuser,psw
test1,123456
test2,123456
test3,123456login_case.yamlconfig:name:登录base_url:https://variables:user:test1psw:"123456"parameters: user-psw:${P(以项目的根目录查找导文件入)}expect:-tokenteststeps:
-name:step-loginrequest:method:POSTheader:Content-type:url:pai/v1/logindata:username:adminpassword:"123456"extract:token:body.tokenvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
5.参数化引用debugtalk函数
创建debugtalk.py文件在根目录下
def get_user_id():return [{"user_id":test1}, {"user_id":test2}, {"user_id":test3}]
def get_user_psw(n):account=[]for i in range(1,n+1): account.append("user":"test"%i,"psw":"123456")return acccount
def register_user(): user = "test"+str(int(time.time()))return userlogin_case.yaml
config:name:登录base_url:https://variables:user:test1psw:"123456"parameters: # user_id:${get_user_id()}user-psw:${def get_user_psw(5)}expect:-token
6.注册案例(随机变量)
Eg:
需求:自动化需要多次反复运行账号注册
问题:注册账号,同一个账号只能注册一次
解决思路:注册账号时添加时间(随机变量)或链接数据库删掉此变量
register.yaml
config:name:注册base_url:https://variables:user:%{register_user()}psw:"123456"
teststeps:
-
7.hook机制(step和teardown)
setup_hooks:开始执行前触发hook函数,主要用于请求预处理(签名,加密)
teardown_hooks:执行结束后触发hook函数,主要用于返回处理(解密)
在debugtalk.py中写两个函数def srtup_hook():print("srtup_hook")def teardown_hook():print("teardown_hook")def request_sign(request):#请求预处理,将body中带上签名参数body = request.get('req_json')sign="sign"body["sigin"]=signrequest[req_json]=bodydef response_status(response):#对返回的结果进行处理,将状态码改成203response.status_code = 203login_case.yaml
config:name:登录base_url:https://variables:user:test1psw:"123456"parameters: user-psw:${P(以项目的根目录查找导文件入)}expect:-tokenteststeps:
-name:step-loginrequest:method:POSTheader:Content-type:url:pai/v1/logindata:username:adminpassword:"123456"setup_hooks:-${def srtup_hook()}-${def request_sign($request)} tear_hooks:-${def teardown_hook()}-${def response_status($response)} extract:token:body.tokenvalidate:- eq:[status_code,200]- eq:[body.code,0]- eq:[body.msg,success]
8.sign签名案例
9.文件上传
upload关键字上传文件upfile.yaml
config:name:上传文件base_url:http://
teststeps:
-name:step-上传文件request:url:/api/v1/upfile/method:POSTupload:file:根目录地址title:文件
10.测试结果校验数据库状态
Eg:
修改商品信息接口,修改商品状态后,校验数据库对应的goodsstatus状态有没有更新成功
updata_goods_fromsql.yamlconfig:name:修改商品用例base_url:http://variables:sp_id:1goodsname:yoyo...merchantid:"1001"price:21.0
teststeps:
-name:step-修改商品request:url:/api/v1/goods/method:PUTjson:goodname:$goodnamegoodcode:$goodcode...price:$price