httpRunner-接口测试开源框架学习

简介

HttpRunner是一款面向HTTP(S)协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

安装

pip install httprunner

安装成功后使用命令查看版本

hrun -V
httprunner -V

 常用文件

YAML/JSON(必须)
测试用例文件,存储接口测试相关信息
debugtalk.py(可选):
1.存储项目中逻辑运算辅助函数
2.该文件存在时,将作为项目根目录定位标记,其所在目录即被视
为项目工程根目录
3.该文件不存在时,运行测试的所在路径(CWD)将被视为项目工
程根目录 
 
.env(可选):
存储项目环境变量,通常用于存储项目敏感信息
.csv(可选)
项目数据文件,用于进行数据驱动
reports
默认生成测试报告的存储文件夹

 

YAML编写注意

基本句法:

1.1key:(空格)value:表示一对键值对(空格必须有);
1.2以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的;
1.3属性和值大小写敏感;
备注:一定不要写tab
1.4 # 为注释
举例:
- config:
    name: "验证能否打开主网页"
    base_url: "http://www.hnxmxit.com"

# 测试步骤
- test:
    name: "open hnxmxit mainpage api"
    request:
      url: "/"
      method: GET
    validate:
      - eq: ["status_code",200]
View Code

用例的基本结构

  • 每个 YAML/JSON 文件对应一个测试用例(testcase)
  • 每个测试用例为一个list of dict结构,其中可能包含全局配置项(config)和若干个测试步骤(test) 
  • config 为全局配置项,作用域为整个测试用例 
  • test 对应单个测试步骤,作用域仅限于本身

示例:

# 全局配置项
- config:
    name: "验证能否打开主网页"
    base_url: "http://www.hnxmxit.com"

# 测试步骤
- test:
    name: "open hnxmxit mainpage api"
    request:
      url: "/"
      method: GET
    validate:
      - eq: ["status_code",200]
View Code

模拟各种请求示例

get请求:

# 全局配置项
- config:
    name: "验证能否打开主网页"
    base_url: "http://www.hnxmxit.com"

# 测试步骤
- test:
    name: "open hnxmxit mainpage api"
    request:
      url: "/"
      method: GET
    validate:
      - eq: ["status_code",200]
View Code

带参数的get请求:

# 模拟带参数的GET请求
- config:
    name: 验证能否获取token值
    base_url: https://api.weixin.qq.com

- test:
    name: get access_token
    request:
      url: /cgi-bin/token
      method: GET
      params:
        grant_type: client_credential
        appid: wxec83eaada223a9c8
        secret: 1867d7f1cabb3bafae0b7304e8251a09
    validate:
      - eq: ["status_code",200]
      - eq: [content.expires_in, 7200]
View Code

模拟请求头:

# 模拟请求头
- config:
    name: "验证百度搜索是否正确"
    base_url: "https://www.baidu.com"

- test:
    name: "百度搜索请求"
    request:
      url: "/s"
      method: GET
      params:
        wd: "amazing"
      headers:
        User-Agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
        Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
        Accept-Encoding: "gzip, deflate, br"
        Accept-Language: "zh-CN,zh;q=0.9"
    validate:
      - eq: ["status_code",200]
View Code

模拟post请求:

# post请求
- config:
    name: "验证修改标签"
    base_url: "https://api.weixin.qq.com"

- test:
    name: "修改标签接口"
    request:
      url: "/cgi-bin/tags/update"
      method: POST
      headers:
        Content_Type: "application/json"
      params:
        access_token: "34_Q6hFvzVz_UAzYulDe3JxkqP8sLxFQygB5t1HZhpzN3Kxak-Ztdy7jB77rnYbEV8H9qIxKLHvhZxxthR9ADkohmhZfJpO8Wv2kkgLXF7KNQjHwDqh-A4VsOyS-mtbAuIAHfVeUvUZKw3QdZEKFAYdAJAVQO"
      json: { "tag" : {"id" : 134, "name" : "天下无贼"   } }
    validate:
      - eq: ["status_code",200]
      - eq: [content.errcode,0]
View Code

变量使用:

# 变量使用
- config:
    name: 验证能否获取token值
    base_url: https://api.weixin.qq.com
#    variables:
#      - appid: wxec83eaada223a9c8
#      - secret: 1867d7f1cabb3bafae0b7304e8251a09

- test:
    name: get access_token
    variables:
      - appid: wxec83eaada223a9c8
      - secret: 1867d7f1cabb3bafae0b7304e8251a09
    request:
      url: /cgi-bin/token
      method: GET
      params:
        grant_type: client_credential
        appid: $appid
        secret: $secret
    validate:
      - eq: ["status_code",200]
      - eq: [content.expires_in, 7200]
View Code

 执行命令

打开CMD终端输入

# hrun 路径/文件名.yml
hrun .\testcases\test_hava_variables_requests.yml

 测试用例结构

对于单个YAML/JSON文件来说,数据存储结构为list of dict 的形式,其中可能包含一个全局配置项(config)和若干个测试用例步骤(test).

对应的YAML格式:

- config:
    ....
- test:
    ....
- test:
    ....
- test:
    ....
View Code

变量空间作用域

在测试用例内部,HttpRunner划分了两层变量空间作用域(context)

config:作为整个测试用例的全局配置项,作用域为整个测试用例;

test:测试步骤的变量空间(context)会继承或覆盖config中定义的内容; 

posted @ 2020-06-13 21:09  Alin。  阅读(250)  评论(0编辑  收藏  举报