httprunner常用使用总结

1. 通过charles抓包工具,抓出接口,并Export session,保存为.har文件,在再cmd.exe中运行“har2cass  xxx.har”得到接口的JSON文件,或者运行“har2case xxx.har -2y”得到接口对应的yaml文件。

httprunner常用使用总结_第1张图片

2. 通过“hrun xxx.json”或者“hrun xxx.yaml”运行测试用例并得到html格式的测试报告

3. 数据驱动,参数引用,第一种直接引用测试,第二种读取CSV文件中的数据,第三种通过debugtalk.py中python代码生成的数

config:
    name: testcase description

testcases:
    $num:
        testcase: ./testcases/baidu.json
        parameters:
            num: [1, 2, 3] #直接引用参数
            #date-name: ${P(./data/data.csv)} #引用CSV文件
            #num: ${get_date(2)} #调用函数debugtalk.py中的方法

4. 获取response中的数据,用“extract”关键字, httprunner里面的content实际上就是request里面的r.content,返回的是一个byte类型。

{
	"code": 0,
	"msg": "login success!",
	"username": "test",
	"token": "b3f7e8e12d23591ea671374dee818c63b1599d4d"
}

上面的json数据,可以转成python里面对应的dict类型,extract提取方法

  • content.code 取出code后面对应的值0
  • content.msg 取出msg后面的对应值"login success!"
  • content.username 取出username后面的值"test"
  • content.token 取出token后面的值"b3f7e8e12d23591ea671374dee818c63b1599d4d"

如果返回值是list类型的,例如:

[{
		"age": 20,
		"create_time": "2019-09-15",
		"id": 1,
		"mail": "[email protected]",
		"name": "yoyo",
		"sex": "M"
	},
	{
		"age": 21,
		"create_time": "2019-09-16",
		"id": 2,
		"mail": "[email protected]",
		"name": "yoyo111",
		"sex": "M"
	}
]

上面这种转化成python里面的list对象,可以用content.int 方法取出对应下标的数据,对应的extract提取方法

  • content.0 取出list里面的第一组数据{"age": 20, "create_time": "2019-09-15", "id": 1, "mail": "[email protected]", "name": "yoyo", "sex": "M"}
  • content.1 取出list里面的第二组数据{"age": 21, "create_time": "2019-09-16", "id": 2, "mail": "[email protected]", "name": "yoyo111", "sex": "M"}
  • content.0.name 取出第一组数据的name对应值"yoyo"
  • content.1.name 取出第二组数据的name对应的值"yoyo111"
  • content.0.mail 取出第一组数据的mail对应值"[email protected]"

通过content.int的方法也可以取出字符串里面的值,比如我要取出第一组数据,name对应值"yoyo"里面的第三个字符,就可以用content.0.name.2,这种取字符串的一般很少用

5. 重复运行,在testcase中加time,例如:

- config:
    name: httpbin api test
    request:
        base_url: http://www.httpbin.org
- test:
    name: get request
    times: 5
    request:
        url: /get
        method: GET
    validate:
        - eq: [status_code,200]

这样,该测试用例就会执行5次

6. skip直接跳过用例;skipIf: 条件成立,返回值为True时候成立,则跳过用例;skipUnless: 条件不成立,返回值为False时候成立,则跳过用例

7. 一个访问歹百度的例子,目录如下:

httprunner常用使用总结_第2张图片

testsuit->config.yml的代码

config:
    name: testcase description

testcases:
    $num:
        testcase: ./testcases/baidu.json
        parameters:
            num: [1, 2, 3] #直接引用参数
            #date-name: ${P(./data/data.csv)} #引用CSV文件
            #num: ${get_date(2)} #调用函数debugtalk.py中的方法

testcases->baidu.json代码

[
    {
      "config": {
        "name": "百度",
        "base_url": "https://www.baidu.com",
        "headers": {"Content-Type": "application/x-www-form-urlencoded" },
        "parameters": {
          "num":"${get_date_randint(10)}"
        }		
      }
    },
    {
      "test": {
        "name": "baidu_json",
        "request": {
          "method": "GET",
          "url": "/",
          "params": {
            "date": "$num"
          }
        },
		"setup_hooks":[
			"${hook_setup($num)}"
		],
		"teardown_hooks":[
			"${hook_teardown($num)}"
		],
        "validate": [
          {
            "eq": ["status_code",200]
          }
        ]
      }
    }
]

debugtalk.py中的代码:

import random

#返回一个列表
def get_date(num1):
	dateid = 0
	dateList = []

	for temp in range(num1):
		dateid += 1
		dateList.append(str(dateid))

	return dateList

#返回一个数字
def get_date_randint(num):
		date = random.randint(0, num)
		return date

def hook_setup(num):
	print("函数执行%s..."%num)


def hook_teardown(num):
	print('执行结束函数%s...'%num)

print(get_date_randint(10))

运行结果:

httprunner常用使用总结_第3张图片

report中的报告详情:

学习文档:

https://cn.httprunner.org/

https://www.cnblogs.com/yoyoketang/tag/httprunner/default.html?page=2

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