欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HttpRunner使用总结

程序员文章站 2022-06-04 16:23:34
...

摘要:最近在用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使用总结

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使用总结
这样导出后会生成一个.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是无序的。