HttpRunner使用总结

摘要:最近在用HttpRunner做接口自动化测试,写这篇博客对HttpRunner的使用加以总结

HttpRunner中文使用文档: https://cn.httprunner.org/

1、json返回值有list时,用0,1来取list的第一个或第二个,如:

{
    "code":"000",
    "msg":"成功",
    "data":{
        "id":"136683550996664320",
        "remark":"",
        "createTime":"2019-07-25 10:00:43",
        "createBy":"131643817329397761",
        "rooms":[
            {
                "roomId":"136683894208172032",
                "roomCode":"CD1907256595A",
                "roomName":"A"
            },
            {
                "roomId":"136683894208172035",
                "roomCode":"CD1907256595B",
                "roomName":"B"
            },
            {
                "roomId":"136683894208172038",
                "roomCode":"CD1907256595C",
                "roomName":"C"
            }
        ],
        "houseId":"136683550996664320"
    }
}

如果我们要取第一个roomId,就可以这样写:

extract:
     - roomId: content.data.rooms.0.roomId

2、https的请求如果报如下错误,要在config或请求头加上: verify: false

Traceback (most recent call last):
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)

HttpRunner使用总结_第1张图片

3、自定义函数写在debugtalk.py文件里
如我们在登录后通常回返回一个access_token,其它接口调用时都要在请求头里加上这个token。那我们可以在debugtalk.py自定义一个获取token的函数,并把这个token存到一个文件里,以供其它接口调用。
自定义的函数如下:

def teardown_saveAuthorization(response: requests.Response):
    conf = configparser.ConfigParser()
    conf.read(DATA_PATH, encoding="utf-8")
    sections = conf.sections()
    # list转换为str
    str = ''.join(sections)
    # 如果没有section,则添加
    if str.find("TOKEN") < 0:
        conf.add_section("TOKEN")
    foo: dict = json.loads(response.text)
    bar: str = "Bearer " + foo['data']['access_token']
    # 写数据
    conf.set("token", "access_token", bar)
    conf.write(open(DATA_PATH, "r+", encoding="utf-8"))
    return bar

在yml用例的调用如下:

teardown_hooks:
    - ${teardown_saveAuthorization($response)}

4、环境变量的使用
在.env文件里设置环境变量,然后在用例就可以用$符号调用了
.env文件如下:

USERNAME=18610170001
PASSWORD=123456
base_url=https://api-gateway-pre.uoko.com

在ym用例里调用如下:

name: 获取验证码
base_url: ${ENV(base_url)}
request:
    url: /auth/verification_code/${ENV(USERNAME)}
    headers:
        Content-Type: application/json;charset=UTF-8
    method: POST
validate:
    -  eq:
        - status_code
        - 200
    -  eq:
        - content.msg
        - 成功

5、环境变量切换
HttpRunner默认使用.env文件里的环境变量,如果我还有一个test.env文件,那么可以用如下命令来切换:

hurn xxx.yml --dot-env-path test.env

6、快速生成一个项目,可用命令:–startproject+项目名,如下:

hrun --startproject xxx_api_test

7、用fiddler抓取请求,再导出.har文件,然后生成用例。
用fiddler抓取请求后,选择相应的请求,然后File->Export Session->Selected Sessions,再选择HTTPArchive v1.2 这个格式,如下图:
HttpRunner使用总结_第2张图片
这样导出后会生成一个.har文件,如我们命名为login.har ,在用har2case这个命令生成用例,如:

har2case login.har  //这样生成的是json格式的用例

生成yml格式的用例只要加上 -2y 即可,如下:

har2case login.har -2y

8、hook函数不能在testsuites里调用,如:

config:
    name: 新增房源-签约租客合同流程
    base_url: ${ENV(base_url)}
    verify: False
    variables:
      base_url: ${ENV(base_url)}
      mobile: ${ENV(USERNAME)}
    setup_hooks:
      - ${setup()}
    teardown_hooks:
      - ${teardown()}
      
testcases:
-
    name: 新增房源-签约租客合同
    testcase: testcases/sign_tenant_contract_Flow_case.yml

这里的setup()和teardown()函数是不会执行的

9、从一个接口返回值里用extract引出的变量不能在当前接口里使用。

10、测试报告的生成路径,看在哪个目录下执行hrun命令就在哪个目录下生成,如果在项目根目录下执行hrun命令,则默认生成在reports文件夹下。如果不是在根目录执行,就行在对应目录新生成一个reports文件夹。

11、testsuitse里执行的testcase是无序的。

你可能感兴趣的:(自动化测试,接口测试,python)