httprunner使用(一)

最近闲来无事翻开论坛闲逛看到了一款基于python语言的开源接口测试工具httprunner,这款工具初始体验就是它的测试用例是维护在一个yml格式或者json格式的数据文件中。只要维护好了这个文件,然后一键命令执行就可以得到想要的结果,而且这种文件生成也非常的方便,使用fiddler可以导出har格式文件然后命令转换为yml或者json格式。这个工具看起来简直就是为我等测试懒人量身打造的,不用更待何时!!

关于安装httprunner
一行命令即可搞定 pip install httprunner
升级httprunner版本: pip install -U httprunner
查看httprunner版本:hrun -V
查看har插件版本:har2case -V

:httprunner最好是在python3环境当中安装,以免出现兼容性问题。

fiddler导出har文件
(一)学会用fiddler导出har文件
fiddler抓包相信大多数有经验的测试都会,不再赘述。这里抓取的是我司的系统登录,系统登录后要获取使用权限,其中登录接口后会调用另一个接口,传动态ticket给权限接口拉取用户权限。

系统打开到登录页面,打开fiddler并使其处于监测状态,登录系统,可以看到fiddler已经抓取到了这两个接口。我们先停止fiddler监控以免页面有过多数据干扰操作。

fiddler选中登录接口,File->Export Sessions->Selected Sessions->HTTPArchive v1.2导出har文件。
httprunner使用(一)_第1张图片
httprunner使用(一)_第2张图片
har文件转换为yml文件或者json文件
windows端打开命令终端窗口输入命令:
har2case E:\httpTest\55.har -2y 加了-2y的表示转换成yml文件,否则是默认转换为json文件,转换后的yml文件内容:

config:
    name: testcase description
    variables: {}
teststeps:
-   name: /urc/motan/service/api/IUrcService/login
    request:
        data:
            deviceName: Chrome浏览器
            pwd: 密码隐藏**
            userName: 用户名隐藏**
        headers:
            Content-Type: application/x-www-form-urlencoded
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
            group: rpc-service-group-test
            paramType: '2'
            prefix: com.yks
            version: '1.0'
        method: POST
        url: https://h2-test.youkeshu.com/urc/motan/service/api/IUrcService/login
    validate:
    -   eq:
        - status_code
        - 200
    -   eq:
        - headers.Content-Type
        - application/json
    -   eq:
        - content.msg
        - 登陆成功
    -   eq:
        - content.state
        - '000001'

上面文件可以在终端输入命令执行:hrun E:\httpTest\test1.yml,执行成功后生成测试报告:httprunner使用(一)_第3张图片
提取响应数据
上面的登录接口要拿取到响应数据的data中的三个字段:ticket,userName,personName传给权限获取接口。提取接口响应数据是用extract提取器,对应响应数据是json格式的我们可以用conteng.**的格式来提取,对于ticket字段,使用content.data.ticket提取。在上面的代码中加入如下代码段:

extract: 
 - ticket: content.data.ticket
 - operator: content.data.userName
 - personName: content.data.personName

变量在接口间传递
前面在登录接口响应数据中提取的参数要创给权限获取接口的request中,我们用$ticket,即前面多了一个美元符号

在这里插入代码片

url优化
在config语句块中添加,一个接口url通常由域名+资源路径组成,前面的登录接口是:https://h2-test.youkeshu.com + /urc/motan/service/api/IUrcService/login 组成。
修改成这样简化接口参数:

config:
    name: testcase description
    baseurl: https://h2-test.youkeshu.com
    variables: {}
teststeps:
-   name: 登录系统
    request:
        data:
            deviceName: Chrome浏览器
            pwd: 密码隐藏**
            userName: 用户名隐藏**
        headers:
            Content-Type: application/x-www-form-urlencoded
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
            group: rpc-service-group-test
            paramType: '2'
            prefix: com.yks
            version: '1.0'
        method: POST
        url: /urc/motan/service/api/IUrcService/login
    extract: 
      - ticket: content.data.ticket
      - operator: content.data.userName
      - personName: content.data.personName
    validate:
    -   eq:
        - status_code
        - 200
    -   eq:
        - headers.Content-Type
        - application/json
    -   eq:
        - content.msg
        - 登陆成功
    -   eq:
        - content.state
        - '000001'

多个接口串联组成测试场景–查询数据
前面说了用$+字符串的形式作为变量传递,所以组合在一起的代码就是这样的:

- config:
    name: testcase description
    base_url: https://h2-test.youkeshu.com
- test:
    name: 登录系统
    request:
        data:
            pwd: 密码隐藏**
            userName: 用户名隐藏**
        headers:
            Content-Type: application/x-www-form-urlencoded
            group: rpc-service-group-test
            paramType: '2'
            prefix: com.yks
            version: '1.0'
        method: POST
        url: /urc/motan/service/api/IUrcService/login
    extract:
        - ticket: content.data.ticket
        - userName: content.data.userName
        - personName: content.data.personName
    validate:
    -   eq:
        - status_code
        - 200
    -   eq:
        - content.msg
        - 登陆成功
    -   eq:
        - content.state
        - '000001'
    -   eq: 
        - content.data.ticket
        - $ticket
- test: 
    name: 获取权限
    request:
        headers:
            Content-Type: application/json
            group: rpc-service-group-test
            paramType: '1'
            prefix: com.yks
            version: '1.0'
        json:
            funcVersion: b66ebf758783d1aced4d2c378154836b
            moduleUrl: /pms/prmanage/prquery/
            operator: $userName
            personName: $personName
            requestId: 03251416520959c722b99df50d8b1f68
            ticket: $ticket
        method: POST
        url: /urc/motan/service/api/IUrcService/getAllFuncPermit
    validate:
    -   eq:
        - status_code
        - 200
    -   eq:
        - content.msg
        - 成功
    -   eq:
        - content.state
        - '000001'

- test:
    name: 查询PR单
    request:
        headers:
            Content-Type: application/json
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
            group: rpc-service-group-test
            paramType: '1'
            prefix: com.yks
            version: '1.0'
        json:
            data:
                merchandiser: yanfukun
                opEmployee: yanfukun
                pageData: 20
                pageNumber: 1
                prState: 0
                searchContents: []
                searchType: 1
                warehouse: 0
            deviceName: Chrome浏览器
            funcVersion: b66ebf758783d1aced4d2c378154836b
            moduleUrl: /pms/prmanage/prquery/
            operator: $userName
            personName: $personName
            requestId: 03251416524407009e3b27d1e39147f2
            ticket: $ticket
        method: POST
        url: /pmsservice/api/PrSearch/prSearch
    validate:
    -   eq:
        - status_code
        - 200
    -   eq:
        - headers.Content-Type
        - application/json
    -   eq:
        - content.state
        - '000001'
    -   eq:
        - content.msg
        - 操作成功

**注:**主要yml数据格式,特别是单个接口用例和多个接口串联时的格式不同,小心调入坑中。我第一次也是在这个格式中徘徊了 一天,所以要熟悉yml的数据格式是很重要的。不熟悉的可以使用json格式来编写用例。

串联接口执行结果:
httprunner使用(一)_第4张图片

你可能感兴趣的:(Python,接口)