# **HttpRunner_Pro**
本项目是基于HttpRunner进行了**功能扩展改造**,在原有功能上添加了接口测试时的数据库操作,如:数据库初始化、数据库数据校验等步骤。
### 框架特点
* 扩展功能是可插拔式。在不使用扩展功能时,该框架与原有框架行为保持一致。
* 扩展功能使用语法,兼顾或复用原有框架的写法
| 数据库 | 是否支持 |
| ------------- | -------- |
| mysql | **已支持** |
| mongo | **已支持** |
| redis | **已支持** |
| elasticsearch | 待支持 |
### 本文大纲
* [背景-为什么要做/改造httprunner框架](#一背景可跳过)
* [使用说明](#二使用说明)
* [使用前提](#1使用前提)
* [安装](#2安装)
* [关键字说明](#3关键字说明)
* [数据库配置](#31-数据库配置)
* [Config](#32-config)
* [DBDeal](#33-dbdeal)
* [DBValidate](#34-dbvalidate)
* [如何改造该框架\或如何改造httprunner框架](#三如何改造该框架)
## 一.背景(可跳过)
### 为什么要做/改造httprunner框架?
* 关键字框架降低了自动化的门槛,执行人员可无编程\低编程进行自动化的实现。
* 多人协同写py自动化时,因每个人的编程能力、规范意识等不同,在有开发规范的前提下,仍会出现各式各样的py自动化脚本,脚本虽可用,但不统一、可维护性差。关键字框架可限制写法,让py脚本具有统一格式、可维护性会有所提高。
## 二.使用说明
## 1·使用前提
如您未使用或了解过httprunner,建议自行学习httprunner。
官方文档: [httprunner V3.x 英文文档](https://docs.httprunner.org/)
中文文档:[httprunner V3.x 中文翻译文档](https://ontheway-cool.gitee.io/httprunner3doc_cn/)
我对httprunner的梳理可见[httprunner调用流程.xmind](https://github.com/zhaochencheng/httprunner_pro/tree/master/docs/)
![httprunner调用说明](./docs/assets/httprunner调用说明.png)
## 2·安装
**说明:如已安装httprunner,请先卸载**
> pip uninstall httprunner
* 方法一:whl包安装
> 下载release中的httprunner-3.1.6.tar.gz
>
> 在测试项目下执行pip install httprunner-3.1.6.tar.gz 进行httprunner的安装
* 方法二:源码构建+whl包安装
> 使用poetry进行包管理
>
> 安装:执行pip install poetry
>
> 构建:poetry build
>
> 构建后在dist目录下httprunner-3.1.6-py3-none-any.whl
>
> 在测试项目下执行pip install httprunner-3.1.6-py3-none-any.whl 进行httprunner的安装
## 3·关键字说明
**先看示例:**
py写法:
```python
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase, DBDeal, DBValidate
class TestCaseRequestWithFunctions(HttpRunner):
config = (
Config("request methods testcase with functions")
.variables(
**{
"foo1": "config_bar1",
"foo2": "config_bar2",
"expect_foo1": "config_bar1",
"expect_foo2": "config_bar2",
}
)
.base_url("https://postman-echo.com")
.verify(False)
.export(*["foo3"])
# 扩展了mysql的数据库配置
.mysql(**{"host": "localhost", "port": 3306, "user": "root", "password": "root","database": "blog", "connect_timeout": 20})
)
teststeps = [
Step(
# 扩展了数据库的初始化操作
DBDeal()
.mysql()
.with_variables(**{"name": "name", "state": 1, "create": "${get_loginid(created_by)}"})
.exec('''INSERT INTO `blog_tag` (`name`, `created_on`, `created_by`, `modified_on`, `modified_by`, `deleted_on`, `state`) VALUES ( 'Golang', '1639404686', 'admin', '0', '', '0', '1');''')
.extract()
.with_jmespath("tags.list1[0].name", "tag_name"),
RunRequest("get with params")
.with_variables(
**{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two(1, 2)}"}
)
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("body.args.foo2", "foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar11")
.assert_equal("body.args.sum_v", "3")
.assert_equal("body.args.foo2", "bar21"),
# 扩展了数据库 数据校验
DBValidate()
.mysql()
.with_variables(**{"name": "name", "state": 1, "create": "${get_loginid(created_by)}"})
.exec('''(select {},{},{} from blog_tag;).format($name, ${get_loginid(state)}, $create)''',"tags")
.extract()
.with_jmespath("tags.list1[0].name", "valtag_name")
.validate()
.assert_equal('valtag_name', 'cc222'),
)
]
if __name__ == "__main__":
TestCaseRequestWithFunctions().test_start()
```
yaml文件写法:
```yaml
config:
name: basic test with httpbin
base_url: ${get_mock_url()}
variables: {"address": "hefei", "mockurl": "${get_mock_url()}", "sql": "select * from table where name = 'bob'", "mysql_env": "${ENV(mysql_host)}", "connect_timeout": 20}
verify: true
export: ["name"]
weight: 1
mysql: {"host": "172.31.114.19", "port": 3306, "user": "root", "password": "root", "database": "blog"}
teststeps:
-
# 新增dbDeal 数据库数据初始化
dbDeal:
- mysql:
conf: {"host": "172.31.114.19", "port": 3306, "user": "root", "password": "root", "database": "blog"}
variables:
{"name": "name", "state": 1, "create": "${get_loginid(created_by)}"}
exec:
sql: "INSERT INTO `blog_tag` (`name`, `created_on`, `created_by`, `modified_on`, `modified_by`, `deleted_on`, `state`) VALUES ( 'Golang', '1639404686', 'admin', '0', '', '0', '1');"
alias: tags
extract:
tag_name: tags.list1[0].name
- mysql:
exec:
sql: 'UPDATE `blog`.`blog_tag` SET `id`="70", `name`="PHP", `created_on`="1639404686", `created_by`="admin", `modified_on`="0", `modified_by`="", `deleted_on`="0", `state`="1" WHERE (`id`="70");'
# httprunner 原有request写法
name: headers
request:
url: /v1/tags
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.code, "000000"]
# 新增dbValidate 数据库数据校验
dbValidate:
- mysql:
conf: {}
exec:
sql: (select {},{},{} from blog_tag;).format($name, ${get_loginid(state)}, $create)
alias: tags
extract:
tag_name: tags.list1[0].name
validate:
- eq: ["tag_name", "cczhao2"]
- mysql:
variables: {"name": "name", "state": 1, "create": "${get_loginid(created_by)}"}
exec:
sql: (select {},{},{} from blog_tag;).format($name, ${get_loginid(state)}, $create)
alias: tags
extract:
tag_name: tags.list1[0].name
validate:
- eq: ["tag_name", "cczhao2"]
```
**简要说明:**
在HttpRunner.Step的参数中进行了扩展,由原生的只支持传RunRequest实例,现横向扩展多个参数。在参数写法上不关注先后顺序
建议以DBDeal -> DBDeal ... -> RunRequest - > DBValidate -> DBValidate ... 这样的写法顺序,便于用例阅读和逻辑理解。
### 3.1 数据库配置
数据库配置可在3个地方进行配置
* Config()中添加;
具体配置参数见[3.2 Config](###3.2 Config)
eg:Config().mysql()
* Step中数
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
该项目基于httprunner的功能扩展和转换,在原始功能中添加了用于接口测试的数 (138个子文件)
CNAME 20B
account.csv 56B
account.csv 56B
user_agent.csv 38B
.csv 0B
test.env 96B
.gitignore 159B
demo-quickstart.har 6KB
demo.har 5KB
qrcode.jpg 9KB
LICENSE 11KB
poetry.lock 91KB
run_testcase.md 25KB
README.md 17KB
gen_tests.md 15KB
write_testcase.md 10KB
run_loadtest.md 8KB
CHANGELOG.md 8KB
scaffold.md 5KB
concepts.md 3KB
index.md 2KB
installation.md 2KB
testing_report.md 2KB
sponsors.md 2KB
bug_report_zh.md 1KB
bug_report.md 911B
feature_request.md 606B
feature_request_zh.md 441B
quickstart.md 164B
httprunner-step-request-validate.png 369KB
charles-save-har.png 329KB
httprunner-chain-call-step-validate.png 308KB
charles-capture-example-postman-echo.png 244KB
httprunner-chain-call-config.png 206KB
charles-export-session.png 178KB
httprunner调用说明.png 156KB
httprunner-formats.png 123KB
httprunner-testcase.png 119KB
hogwarts.png 9KB
make.py 27KB
runner.py 27KB
parser.py 23KB
parser_test.py 20KB
testcase.py 16KB
loader.py 13KB
core.py 12KB
compat.py 12KB
testcasedb.py 12KB
make_test.py 9KB
response.py 9KB
client.py 9KB
compat_test.py 8KB
utils.py 7KB
core_test.py 6KB
models.py 6KB
scaffold.py 6KB
utils_test.py 6KB
__init__.py 5KB
cli.py 5KB
loader_test.py 4KB
database.py 4KB
dbutil.py 4KB
comparators.py 4KB
debugtalk.py 3KB
utils.py 3KB
request_with_variables_test.py 3KB
request_with_functions_test.py 3KB
request_with_functions_test.py 3KB
__init__.py 3KB
basic_test.py 2KB
validate_with_variables_test.py 2KB
conftest.py 2KB
har_utils_test.py 2KB
request_with_testcase_reference_test.py 2KB
request_with_testcase_reference_test.py 2KB
response_test.py 2KB
hardcode_test.py 2KB
__init__.py 2KB
conftest.py 2KB
debug_test.py 2KB
request_with_parameters_test.py 2KB
runner_test.py 2KB
debug.py 2KB
cli_test.py 1KB
upload_test.py 1KB
exceptions.py 1KB
hooks_test.py 1KB
validate_with_functions_test.py 1KB
scaffold_test.py 1KB
load_image_test.py 1007B
debugtalk.py 979B
deps.py 957B
validate_test.py 887B
functions.py 878B
locustfile.py 810B
__init__.py 553B
debugtalk.py 468B
main.py 371B
debugtalk.py 187B
__init__.py 114B
共 138 条
- 1
- 2
资源评论
普通网友
- 粉丝: 1127
- 资源: 5292
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (2951806)学生成绩管理系统软件
- 在线远程考试-JAVA-基于Spring Boot在线远程考试系统的设计与实现(毕业论文+PPT+开题+任务书)
- (31743232)图书管理系统 毕业设计
- 考虑大规模电动汽车接入电网的双层优化调度策略 软件:Matlab;cplex 介绍:摘要:随着经济发展和化石燃料短缺、环境污染严重的矛盾日益尖锐,电动汽车( Electric Vehicle,EV)的
- 武器检测54-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- (42757812)0.96寸OLED显示屏STC8A8K64S4A12-IIC-例程
- (5820406)学籍管理系统vb+sql
- (767402)学生管理系统(VB+SQL)+论文
- VBA视频教程 0002
- 0f7c779db05cdd16f029ff16c742568e.apk
- 电影院购票-JAVA-基于springBoot的电影院购票系统设计与实现(毕业论文)
- (173083656)河西学院网络工程javaweb期末大作业.zip
- (174380844)1950年至2020年间各省GDP
- 基于Java+Swing+Mysql的超市客户关系管理系统(高分课程作业)
- 家政服务平台-JAVA-基于springBoot的家政服务平台的设计与实现(毕业论文)
- (175700654)适合练手、课程设计、毕业设计的Java项目源码:图书馆书库管理系统设计(论文+源代码).rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功