httprunner学习2-har2case录制生成脚本

前言

复制毁一生,录制穷三代,如果你只是因为不想写脚本,而去录制脚本,那我建议你还是别学录制了。
录制脚本,只是一个过渡,从0到1的一个过渡,如果让你直接写脚本,你会无从下手,可以将录制的脚本快速转化成httprunner脚本文件。
har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件,生成.har格式文件可以借助fiddler或Charles抓包工具。

环境准备

如果你已经安装过httprunner,那应该是自带了har2case包,如果没有的话,可以用pip安装

pip install har2case==0.3.1

查看版本号

har2case -V
0.3.1

-h查看帮助选项

C:\Users\dell>har2case -h
usage: har2case [-h] [-V] [--log-level LOG_LEVEL] [-2y] [-fmt FMT_VERSION]
[--filter FILTER] [--exclude EXCLUDE]
[har_source_file]

Convert HAR(HTTP Archive) to YAML/JSON testcases for HttpRunner.

positional arguments:
har_source_file Specify HAR source file

optional arguments:
-h, --help show this help message and exit
-V, --version show version
--log-level LOG_LEVEL
Specify logging level, default is INFO.
-2y, --to-yml, --to-yaml
Convert to YAML format, if not specified, convert to
JSON format by default.
-fmt FMT_VERSION, --format FMT_VERSION
Specify YAML/JSON testcase format version, v2
corresponds to HttpRunner 2.2.0+.
--filter FILTER Specify filter keyword, only url include filter string
will be converted.
--exclude EXCLUDE Specify exclude keyword, url that includes exclude
string will be ignored, multiple keywords can be
joined with '|'

Fiddler抓包生成.har文件

以登录接口为案例,登录接口相关文档信息如下:

  • 访问地址:

    http://127.0.0.1:8000/api/v1/login/

  • 请求类型:

    POST

  • 请求头部:

    application/json

  • 请求参数:

    {“username”:”test”, “password”:”123456”}

在Fiddler上发送接口请求后,抓包如下

抓到这个请求后,右上角File->Export Sessions->Selected Sessions->Select Export Format->勾选HTTPArchive v1.1

勾选HTTPArchive v1.1类型后,下一步导出为test_login_demo.har文件

har2case转yaml格式脚本

接下来将刚才生成的test_login_demo.har文件,使用har2case转成yam格式的脚本文件

har2case test_login_demo.har -2y

-2y参数是设置转成.yml格式的脚本,如果不加这个参数,默认转成json格式

D:\>har2case test_login_demo.har -2y
INFO:root:Start to generate testcase.
INFO:root:dump testcase to YAML format.
INFO:root:Generate YAML testcase successfully: test_login_demo.yml

查看刚才生的的test_login_demo.yml,内容如下

# 上海悠悠,QQ交流群:750815713
- config:
name: testcase description
variables: {}
- test:
name: /api/v1/login/
request:
headers:
Content-Type: application/json
User-Agent: Fiddler
json:
password: '123456'
username: test
method: POST
url: http://127.0.0.1:8000/api/v1/login/
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- content.code
- 0
- eq:
- content.msg
- login success!
- eq:
- content.username
- test
- eq:
- content.token
- a95b077eb4b884b9186f60a47f37b4746c7c6a60

运行用例

.yml格式脚本生成后,接下来使用hrun运行用例

hrun test_login_demo.yml

D:\>hrun test_login_demo.yml
/api/v1/login/
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 437.79 ms, response_length: 109 bytes
INFO start to validate.
ERROR validate: content.token equals a95b077eb4b884b9186f60a47f37b4746c7c6a60(str) ==> fail
c7dca34cc6ff93049985c44967f132c4146e995e(str) equals a95b077eb4b884b9186f60a47f37b4746c7c6a60(str)
ERROR request:
headers: {'content-type': 'application/json', 'user-agent': 'Fiddler'}
json: {'password': '123456', 'username': 'test'}

ERROR response:
status_code: 200
headers: {'Date': 'Sat, 21 Sep 2019 09:54:57 GMT', 'Server': 'WSGIServer/0.2 CPython/3.6.0', 'Content-Type': 'application/json', 'Vary': 'Accept, Cookie', 'Allow': 'POST, OPTIONS', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Length': '109'}
body: '{"code": 0, "msg": "login success!", "username": "test", "token": "c7dca34cc6ff93049985c44967f132c4146e995e"}'

F

======================================================================
FAIL: runTest (httprunner.task.TestCase)
/api/v1/login/
----------------------------------------------------------------------
Traceback (most recent call last):
File "e:\python36\lib\site-packages\httprunner\task.py", line 27, in runTest
self.test_runner.run_test(self.testcase_dict)
httprunner.exceptions.ValidationFailure

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "e:\python36\lib\site-packages\httprunner\task.py", line 29, in runTest
self.fail(repr(ex))
AssertionError: ValidationFailure()

----------------------------------------------------------------------
Ran 1 test in 0.468s

FAILED (failures=1)
INFO Start to render Html report ...
INFO Generated Html report: D:\reports\1569059697.html

D:\>

你会发现运行用例会失败,打开测试报告,会发现是token校验失败了,因为token每次都是动态生成的,所以token校验不能写死了

解决办法很简单,去掉这个token校验即可

- eq:
- content.token
- a95b077eb4b884b9186f60a47f37b4746c7c6a60

生成json格式脚本

har2case默认生成json格式的脚本,因为个人更喜欢yaml格式,所以json格式写在后面了.

har2case test_login_demo.har

D:\>har2case test_login_demo.har
INFO:root:Start to generate testcase.
INFO:root:dump testcase to JSON format.
INFO:root:Generate JSON testcase successfully: test_login_demo.json

D:\>

生成的test_login_demo.json内容如下

# 上海悠悠,QQ交流群:750815713
[
{
"config": {
"name": "testcase description",
"variables": {}
}
},
{
"test": {
"name": "/api/v1/login/",
"request": {
"url": "http://127.0.0.1:8000/api/v1/login/",
"method": "POST",
"headers": {
"User-Agent": "Fiddler",
"Content-Type": "application/json"
},
"json": {
"username": "test",
"password": "123456"
}
},
"validate": [
{
"eq": [
"status_code",
200
]
},
{
"eq": [
"headers.Content-Type",
"application/json"
]
},
{
"eq": [
"content.code",
0
]
},
{
"eq": [
"content.msg",
"login success!"
]
},
{
"eq": [
"content.username",
"test"
]
},
{
"eq": [
"content.token",
"a95b077eb4b884b9186f60a47f37b4746c7c6a60"
]
}
]
}
}
]

filter和exclude过滤

你可以使用filter参数,过滤url包含xxx.com的内容,如只转包含127.0.0.1的url请求

$ har2case demo.har —filter 127.0.0.1

也可以使用exclude来过滤,除xxx.com以外的内容

$ har2case demo.har—exclude xxxx.com

2019第一期《python测试开发》课程,10月13号开学!

本期上课时间:10月13号-12月8号,每周六、周日晚上20:30-22:30

(0)

相关推荐

  • Python Requests Pytest YAML Allure实现接口自动化

    作者:wintest 链接:https://www.cnblogs.com/wintest/p/13423231.html 本项目实现接口自动化的技术选型:Python+Requests+Pytest ...

  • 基于深度学习的文本自动生成

    导读:本章主要介绍如何通过文本到文本的文本复述技术,进行基于深度学习的文本自动生成.文本复述技术的现有方法能够为给定的文本生成具有较小差异的复述文本,但是难以有效生成具有很大差异的高质量复述文本.原因 ...

  • httprunner学习1-环境与登录接口案例

    前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 使用环境: python 3.6 httprunner 1 ...

  • httprunner学习3-extract提取token值参数关联

    前言 如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了. 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了.那么接下 ...

  • httprunner学习4-variables变量声明与引用

    前言 在 HttpRunner 中,支持变量声明(variables)和引用($var)的机制.在 config 和 test 中均可以通过 variables 关键字定义变量,然后在测试步骤中可以通 ...

  • httprunner学习5-参数化与数据驱动

    前言 参数化是自动化测试离不开的话题,httprunner里面只要把上一篇声明变量学会了,参数化也就自然会了. 不同的地方在于声明变量时对应值只有一个,参数化是多个值,存放在list里面. 登录参数化 ...

  • httprunner学习8-validate校验器

    前言 在一个完整的测试用例中,断言是必不可少的,断言是拿实际结果和期望结果去比较,在httprunner中用validate来对比测试结果. validate校验器 在httprunner的源码里,u ...

  • httprunner学习7-extract提取content返回对象

    前言 提取response返回的对象数据,用extract关键字.前面有关于token的取值,通过content.token取值. 本篇详细讲解如何从返回的json数据提取出想要的各种数据 conte ...

  • httprunner学习6-参数化(引用外部csv数据)

    前言 上一篇已经实现参数化,但是数据是放在.yml文件里面,当测试数据非常多的时候,我们希望把测试数据写到csv文件. httprunner==1.5.8 独立参数 对于已有参数列表,并且数据量比较大 ...

  • httprunner学习11-辅助函数debugtalk.py

    前言 在httprunner里面,每个  YAML / JSON 文件的脚本都是独立运行的,有时候我们希望能跨文件使用公用的参数. 比如登录生成一个token,后面的用例都可以去引用这个token值, ...