在学pytest的过程中,我一直搞不懂为什么变量引用用变量名或{变量名}引用,方法用
代码语言:javascript复制from string import Template
...
var_data = Template("access_token is $access_token")
# sub_string的内容可以读取yaml文件,然后转换成string,即dumps
sub_string = {"access_token": "abcdefg12345"}
var_data.safe_substitute(sub_string)
...
完成变量引用。
我们继续来学习httprunner3.x版本
上一讲我们先介绍了httprunner的必须知道的命令。
现在我们来通过案例,进一步了解httprunner
我们先打开fiddler,然后用postman分别跑获取access_token和创建标签的接口。分别选择fiddler抓到的两个接口的包,然后选择导出
格式选择HTTPArchive v1.2,这样保存下的就是.har文件
然后把这两个.har文件复制到项目har文件夹下,并在pycharm的终端(Terminal)中先到har文件夹目录,然后执行命令
代码语言:javascript复制har2case 文件名.har -2y
也就是把har文件转换成yaml文件,如下图
然后我们把get_acc.yml内容进行修改,改成我们做接口框架时要用的样子
1、删掉多余的内容如headers
2、用例数据全部采用引用
代码语言:javascript复制config:
name: testcase description
variables:
appid: wx4d8f7de320aca501
grant_type: client_credential
secret: d096e22047235cad799d917a517c6246
verify: False
base_url: https://api.weixin.qq.com
teststeps:
- name: /cgi-bin/token
request:
method: GET
params:
appid: $appid
grant_type: $grant_type
secret: $secret
url: /cgi-bin/token
extract:
access_token: content.access_token
validate:
- equals:
- status_code
- 200
- eq:
- body.expires_in
- 7200
然后通过hrun get_acc.yml
执行
可以看到用例仍然成功了。
一般来说,我们测试用例的结构为:
代码语言:javascript复制config: #配置
name #名称
variables #全局变量
verify #https协议
base_url #环境变量
teststeps #步骤
name #步骤名称
request #请求
headers #请求头
method #请求方式
params #请求参数
url #请求路径
cookie #cookie信息
json #用于发送http请求正文
data #用于发送http请求正文
extract #提取:通过content或body,很少用正则
validate #断言
直接执行hrun 文件名.yml
不打印返回值,加个-s即可
hrun -s 文件名.yml
上面我们实现了单个接口用例,但是我们工作中要做很多冒烟测试,那怎么把用例关联呢?
我们先对文件进行分类
1、把.har文件放到har文件夹
2、新建api文件夹,把我们写好的变量用例放到里面
3、把测试用例文件放到testcases文件夹
4、新建testsuites文件夹,用于存放冒烟、接口关联用例
代码:
代码语言:javascript复制# api/get_access_token.yml
config:
name: 获取access_token
variables:
appid: wx4d8f7de320aca501
grant_type: client_credential
secret: d096e22047235cad799d917a517c6246
verify: False
base_url: https://api.weixin.qq.com
teststeps:
- name: /cgi-bin/token
request:
method: GET
params:
appid: $appid
grant_type: $grant_type
secret: $secret
url: /cgi-bin/token
extract:
access_token: content.access_token
代码语言:javascript复制# api/select_tags.yml
config:
name: 查询标签
variables:
access_token: ${access_token}
verify: false
base_url: https://api.weixin.qq.com
teststeps:
- name: /cgi-bin/tags/get
request:
method: GET
params:
access_token: ${access_token}
url: /cgi-bin/tags/get
代码语言:javascript复制# testcases/get_access_token_case.yml
config:
name: get_access_token
teststeps:
- name: /cgi-bin/token
api: api/get_access_token.yml
代码语言:javascript复制# testcases/select_tags_case.yml
config:
name: select tags
teststeps:
- name: /cgi-bin/token
api: api/get_access_token.yml
export:
- access_token
- name: /cgi-bin/tags/get
api: api/select_tags.yml
代码语言:javascript复制# testsuites/tags_suits.yml
config:
name: 查询标签
teststeps:
- name: /cgi-bin/token
testcase: testcases/get_access_token_case.yml
- name: /cgi-bin/tags/get
testcase: testcases/select_tags_case.yml
testsuits一般用于接口关联的冒烟测试。
需要注意的是查询标签需要传access_token,我们在api文件夹下的select_tags.yml写的全是变量。如下图:
提取变量在测试用例的export关键字里,这样写就能把返回的access_token取出来了
这里需要强调一下:
1、文件夹的名不要写错了,在httprunner里文件夹名是有要求的
2、testsuites文件夹下调用的用例里不能有断言validate。
不然就会各种报错……