既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
Rabbitmq
RabbitMQ 是一个由 Erlang 语言开发的 AMQP(高级消息队列协议)的开源实现。它支持多个消息传递协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模、高可用性的需求,另外安装rabbitmq需要先安装erlang
。
下载地址:Downloading and Installing RabbitMQ — RabbitMQ 下载后双击rabbitmq-server-3.7.7.exe
文件进行安装。
安装完成后如下图如所示,选中RabbitMQ Service -start
然后以管理员身份运行。
可以通过访问 http://localhost:15672 进行测试,默认的登陆账号为:guest,密码为:guest。
数据库配置
打开HttpRunnerManager
项目的setting.py
文件,进行如下配置
if DEBUG:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'HttpRunnerManager', # 新建数据库名
'USER': 'root', # 数据库登录名
'PASSWORD': '', # 数据库登录密码
'HOST': '127.0.0.1', # 数据库所在服务器ip地址
'PORT': '3306', # 监听端口 默认3306即可
}
}
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # 静态文件额外目录
)
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'HttpRunnerManager', # 新建数据库名
'USER': 'root', # 数据库登录名
'PASSWORD': '', # 数据库登录密码
'HOST': '127.0.0.1', # 数据库所在服务器ip地址
'PORT': '3306', # 监听端口 默认3306即可
}
}
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
work配置
修改work配置
djcelery.setup_loader()
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = 'Asia/Shanghai'
BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//' if DEBUG else 'amqp://guest:guest@127.0.0.1:5672//'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_RESULT_EXPIRES = 7200 # celery任务执行结果的超时时间,
CELERYD_CONCURRENCY = 1 if DEBUG else 10 # celery worker的并发数 也是命令行-c指定的数目 根据服务器配置实际更改 一般25即可
CELERYD_MAX_TASKS_PER_CHILD = 100 # 每个worker执行了多少任务就会死掉,我建议数量可以大一些,比如200
EMAIL_SEND_USERNAME = 'xxxx@163.com' # 定时任务报告发送邮箱,支持163,qq,sina,企业qq邮箱等,注意需要开通smtp服务
EMAIL_SEND_PASSWORD = 'XXX' # 邮箱密码
样式文件更新
由于该项目已经停止更新维护,导致部分样式css文件地址失效。
修改HttpRunnerManager\templates
下的base.html
文件
第23
行,需要修改一下
#将这行代码进行更新
<link rel="stylesheet" href="http://cdn.amazeui.org/amazeui/2.7.2/css/amazeui.min.css"/>
#更新后的代码
<link rel="stylesheet" href="http://cdn.bootcss.com/amazeui/2.7.2/css/amazeui.min.css"/>
安装依赖库文件
打开cmd命令窗口,切换到HttpRunnerManager
目录,然后执行下面命令,自动安装需要的依赖库文件。
pip install -r requirements.txt
数据库迁移
python manage.py makemigrations ApiManager #生成数据迁移脚本
python manage.py migrate #应用到db生成数据表
创建超级用户,用户后台管理数据库,并按提示输入相应用户名,密码,邮箱。
python manage.py createsuperuser
启动服务
输入下面命令启动服务
python manage.py runserver
服务启动成功之后,打开如下地址,可以进入到不同的页面。
- 后台数据库管理:http://127.0.0.1:8000/admin/
注册登录之后就可以看到平台的界面,接下来就可以创建接口测试的项目和用例了。
HttpRunnerManager 入门使用
创建项目
在首页点击左侧菜单栏新增项目,然后输入项目相关信息。我们接下来将会以httpbin里面的接口来进行测试,所以项目名称命名为:httpbin接口测试
创建模块
一个项目会一般分为多个功能模块,我们可以创建不同模块,然后基于不同模块创建测试用例。
在左侧菜单选择模块管理 然后点击新增模块,接下来输入模块信息。 这里我们创建一个模块:HTTP_Methods
创建环境
在接口测试过程中,我们有时需要设置base_url
来提高用例编写执行效率,我们可以在系统设置中的运行环境来创建。例如我们创建一个base_url操作过程如下图所示:
创建用例
这里以下面接口为例创建用例:
http://www.httpbin.org/get #请求方式为GET
点击顶部快捷入口新增用例 然后在用例编辑窗口切换到request
来编辑用例,操作步骤如下:
如上图演示所示,用例名称为test_get_request
用例要归属到项目和具体的模块
运行测试
如下图所示,点击用例测试的运行图标,然后选择运行环境即可执行用例,执行完成之后会自动生成测试报告,可以查看运行的结果。
以上我们就完成了单个接口的简单测试,接下来我们要进一步完善用例。
HttpRunnerManager 用例配置
header设置
如果想自定义header信息,则可以在用例编辑界面点击add headers
,然后配置header信息。操作如下图所示:
请求参数
URL参数
在GET请求中,经常会有在URL中的参数,也就是Query String Parameters
比如在用例 test_get_request
增加一个参数 user=51zxw
操作过程如下:
body参数
在Post请求中,请求参数一般放在请求体Request body
中,HttpRunner支持form-data
和json
两种数据格式来传递参数。
这里我们的测试接口如下:请求类型为POST
http://httpbin.org/post
form-data
首先创建用例名称为test_post_formdata
用例编辑界面Type
选择data
,然后点击add data
按钮,在下面表单中输入参数名称和值即可。操作过程如下:
json
传递Json
参数与form-data
方法类似,选择Type
时选Json
创建用例test_post_jsondata
操作流程如下:
获取返回结果
HttpRunnerManager提供了extract
功能来从返回结果中提取我们需要的内容。例如前面用例test_get_request
执行之后返回结果如下:
{
"args": {
"user": "51zxw"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4",
"User-Headers": "zxw2018"
},
"origin": "110.52.4.234",
"url": "http://httpbin.org/get?user=51zxw"
}
如果我们想提取user
值放在一个变量里面,那么可以使用extract
来提取。在用例编辑界面点击extract/validate
标签,然后点击add extract
按钮,进行如下配置即可:
其中Key
的值response_user
就是将返回值存储的变量名,content.args.user
表示从返回内容中提取args
属性中的user
值。下一步在断言设置中,我们可以验证是否获取正确。
断言设置
结合前面提取返回值的内容,我们设置断言验证返回的user
值是否和我们预期的一样,首先点击add validate
然后可以进行如下设置:
上面的$response_user
表示引用我们之前设置的获取返回值的变量,Comparator
表示匹配规则,匹配规则有很多可以点击下拉菜单查看 Expected
值表示我们的期望值。
执行用例之后,我们可以看到在测试报告中,断言验证是通过的。
当然如果还想添加其他断言规则,就继续点击add validate
例如设置验证响应状态码为200
可以进行如下设置
注意:200
数值类型为int
用例组合
有时候我们想把一些单个的接口按照指定顺序组合成为一个业务逻辑模块。比如用户模块,把用户注册、用户登录,用户退出几个用例封装成一个业务逻辑模块,从而形成接分层测试。
实践案例:
将之前的三个用例test_get_request
,test_post_formdata
、test_post_jsondata
封装为一个用例test_method_group
然后执行test_method_group
。具体操作如下:
从图中我们可以看出新建一个用例test_method_group
,然后可以自由添加单个接口用例,并且可以自由调整用例执行顺序,以及删减用例。
注意:新建组装的用例时, 只能选择单请求的用例进行拼接, 不可选择已组装过的用例。例如再新建一个用例,把
test_method_group
放进去是不行的。
只能选择包含”不包含别的用例的用例”。
测试计划
测试套件
测试套件(test suite)和我们上面讲的组合用例类似,我们可以把单个用例按照业务逻辑进行组合运行,和组合用例不同的是:测试套件可以包含组合用例,但是组合用例不能包含组合用例。
测试套件是对测试用例的更高一层的封装。
实践案例
创建测试用例集suite_test_methods
包含测试用例test_get_request
和组合用例test_method_group
然后执行查看结果。
操作过程如下:
从上图中我们可以看到创建的测试套件成功执行,加载的测试套件也可以任意调整执行顺序。相关的数据配置会自动从用例的配置中读取,无需再单独配置参数。
上面我们选择的是同步执行方式,我们可以选择异步执行方式,可以在后台执行,然后生成测试报告。
在异步执行之前我们需要先启动支持异步的相关服务:
1.启动RabbitMQ Server
2.进入到HttpRunnerManager目录,启动worker
1
|
python manage.py celery -A HttpRunnerManager worker --loglevel=info
|
3.启动任务监控后台
1
|
celery flower
|
celery简介
Celery是一个异步任务队列/基于分布式消息传递的作业队列。它侧重于实时操作,但对调度支持也很好。Celery用于生产系统每天处理数以百万计的任务。Celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。
执行完成之后我们可以在【报告管理】——【查看报告】中看到生成的测试报告。
定时任务
测试套件还支持定时任务,这样方便进行回归测试。
定时任务需要启动定时任务监听器,具体如下:
1
|
python manage.py celery beat --loglevel=info
|
平台界面设置步骤为:点击菜单栏左侧【测试计划】-【定时任务】 进入到【系统设置】界面,可以进行如下设置:
上面定时配置 */10 * * * *
表示每10分钟执行一次,使用的是crontab
表达式
执行结果如下图所示,可以看到是每隔10分钟执行一次。
crontab格式
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
分 时 日 月 星期
- 第1列分钟0~59
- 第2列小时0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
crontab设置案例
每隔1分钟执行一次
1
|
* * * * *
|
每30分钟运行一次:
1
|
*/30 * * * *
|
每隔1小时执行一次
1
|
* */1 * * *
|
每周一到周五早上八点运行
1
|
* 8 * * 1-5
|
相关资料:crontab表达式
注意
如果遇到如下报错:
1
2
3
|
D:\HttpRunnerManager>python manage.py celery beat --loglevel=info
celery beat v3.1.26.post2 (Cipater) is starting.
OSError: [WinError 87] 参数错误。
|
进入到HttpRunnerManager目录,然后删除celerybeat.pid
文件,重启命令即可。
配置管理
前面我们用例的各个参数都是配置在各自用例之中的,如果参数有变化则需要打开对应请求用例来修改,当用例数量较多时,这样操作会比较低效。那么该如何有效解决这个问题呢?
使用HttpRunnerManager的配置管理工具就可以比较好的解决这个问题。我们可以将一些公共的变量,参数、方法、请求头信息都存储在一个配置模块中,这样维护和使用就非常便利。
支持的配置类型包括以下几类:
Variables
变量类型Parameters
参数类型Hooks
方法类型Request
请求类型
点击菜单栏左侧的配置管理 然后点击新增配置 或者直接顶部新增配置快捷入口,就可以创建配置。
这里演示Variables
和Parameters
配置
variable配置
如下图所示:创建公共变量com_user
值设为zxw2018
操作过程如下:
变量创建完成之后,接下来要引用这个公共变量,在用例test_get_request
和test_post_formdata
分别添加公共变量com_user
,配置如下:
最后开始引用配置,在用例test_method_group
中引用该配置,然后运行即可。操作过程如下:
从上图可以看出,我们设置的配置变量已经在用例生效,下次想修改变量值,只需要修改配置就可以了。
注意:
当用例1关联了配置(config)1, 用例2关联了配置(config)2 时,
现在新建一个用例3, 将用例1和用例2都组合进用例3中, 并且用例3关联配置(config)3,
此时执行用例3, 配置(config)1 和 配置(config)2 会被使用么?
答案是不会, 执行用例3时, 只有配置(config)3 会被使用. 在执行的过程中, 用例1和用例2所要引用的变量, 都只会去配置(config)3中找。
Parameters配置
对用例中的某些请求参数, 有时想要测试多种输入情况, 可以为每种情况都编写独立的用例或配置. 但是这样会比较麻烦, 另一种方式是将原来的variables
变量定义改为Parameters
参数列表来定义. 这个列表中定义需要传入的参数. 然后使用这些参数分别执行一次,也就是参数化。
案例1——单个参数设置
针对用例test_get_request
设置参数para_user
分别取值为[‘zxw2016’,'zxw2017','zxw2018']
针对这三个不同的参数来进行接口测试。
配置好之后,接下来点击用例test_get_request
然后添加参数配置,操作如下所示:
从上图我们可以看出,用例遍历执行了我们设定的三个参数。
案例2——多个参数
对于同时存在多个参数列表, 则需要对其排列组合的每一种情况都执行一次,也就是笛卡尔乘积
例如有xx
和yy
两组参数,对应的变量分别如下
1
2
|
xx : [xxvalue1, xxvalue2]
yy : [yyvalue1, yyvalue2, yyvalue3]
|
那么最终会按以下六种情况各执行一次用例:
1
2
3
4
5
6
|
xx=xxvalue1, yy=yyvalue1
xx=xxvalue1, yy=yyvalue2
xx=xxvalue1, yy=yyvalue3
xx=xxvalue2, yy=yyvalue1
xx=xxvalue2, yy=yyvalue2
xx=xxvalue2, yy=yyvalue3
|
所以, 当对多个变量使用parameters参数列表时, 特别需要事先考虑清楚用例将会被循环的次数. 避免不必要的测试时间的消耗.
例如在配置表中我们再增加一个参数para_pwd
取值为['666', '888']
然后在用例中引用变量para_pwd
最后执行的结果为6次。
参数组合为:
1
2
3
4
5
6
|
zxw2016,666
zxw2016,888
zxw2017,666
zxw2017,888
zxw2018,666
zxw2018,888
|
配置参数的作用域
当组合用例中的单个用例引用了配置参数,那么该组合用例下所有的用例都会按照参数组合来执行对应的次数。
例如在test_method_group
中用例test_get_request
引用了配置参数,那么所有的用例都会执行6次(上面案例中para_user
和para_pwd
的笛卡尔积),总共为3*6=18次。
这样带来一个问题也就是有些没有设置参数的用例也会重复运行,这对整体运行效率会有比较大的影响,
如果只想针对指定的用例遍历设定的参数,那么需要将参数配置在用例中,而不是在公共配置模块中。
例如在用例test_get_request
配置参数para_user
取值为['zxw2016', 'zxw2017', 'zxw2018']
同时删除之前配置模块的对应的参数,以及引用的参数。
然后执行用例集test_method_group
,那么test_get_request
会根据设置的三个不同参数运行3次,其他两个接口运行1次。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
method_group中用例
test_get_request引用了配置参数,那么所有的用例都会执行6次(上面案例中
para_user和
para_pwd`的笛卡尔积),总共为3*6=18次。
这样带来一个问题也就是有些没有设置参数的用例也会重复运行,这对整体运行效率会有比较大的影响,
如果只想针对指定的用例遍历设定的参数,那么需要将参数配置在用例中,而不是在公共配置模块中。
例如在用例test_get_request
配置参数para_user
取值为['zxw2016', 'zxw2017', 'zxw2018']
同时删除之前配置模块的对应的参数,以及引用的参数。
然后执行用例集test_method_group
,那么test_get_request
会根据设置的三个不同参数运行3次,其他两个接口运行1次。
[外链图片转存中…(img-qQWuYKj2-1715115291284)]
[外链图片转存中…(img-hvZ9k2cn-1715115291285)]
[外链图片转存中…(img-c5GJcw2C-1715115291285)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新