前言
现在是2021年,这两年的测试环境发生了翻天覆地的变化,自动化测试,性能测试,测试开发,能效平台等各种技能名次层出不穷,新技术革新换代太快,内卷化十分严重,大环境不是很友好。时代的尘埃落在了你我头上,对于个人而言,只有继续学习方能寻求一个心安理得的出路。当然了,翻山越岭总是在所难免,不积硅步无以至千里,高楼大厦也是一砖一瓦垒起来的,学习的路上我们也是要从最基础的技术一点点学起,不可能一下子就投入到高深莫测的技能中去。
自动化测试,是目前测试行业一项比较普遍的测试技术了,之前的以UI自动化测试为主,现在的以接口自动化测试为主,无论技术更迭,自动化测试总有他的重量,用机器代替手工工作,是21世纪不断进行的课题。
这个系列文章我将会分享一下怎么搭建一个简易又不失核心的接口自动化测试框架。希望我的框架能给予你一定启发的同时,你也能指出一些我的不足之处,互相学习,我们才能共同进步。
计划章节
1、基础配置
2、封装日志和缓存
3、读取yml测试文件
4、处理request
5、处理response
6、接口上下文参数关联
7、集成allure报告
8、Jenkins持续集成
9、发送邮件
由于每天都挺忙的,而且没有经济效益,纯属用爱发电,所以更新的速度不是很及时。
环境搭建
目录文件添加
我们打开vscode新建一个项目,名字就姑且命名为:interface_test_example
, 创建好之后,我们就按照这个下面这个目录结构去创建相应的文件内容。
.
├── common ——公共方法目录
│ ├── cache.py ——缓存文件
│ ├── exceptions.py ——异常处理
│ ├── __init__.py
│ ├── json.py ——序列化和反序列化
│ ├── regular.py ——正则处理
│ ├── request.py ——请求处理
│ └── result.py ——响应处理
├── conftest.py ——pytest胶水文件
├── environment.properties ——allure配置文件
├── logs ——日志目录
├── main.py ——主运行文件
├── pytest.ini ——pytest配置文件
├── readme.md
├── requirements.txt
├── tests ——测试用例目录
│ └── testcase.yaml
└── utils ——第三方工具文件
├── __init__.py
├── logger.py ——日志
├── readme.md
└── time.py ——时间处理
当你把上面这些内容创建完成之后我们的项目内容就算整体创建完成了。
python虚拟环境创建
在创建之前我先声明一下我所使用的python版本是3.8.6版本。学习本篇请不要使用3.8版本以下python,某些语法会不支持。
1、创建虚拟环境
python3 -m venv env
2、 安装requirements.txt
的依赖包
pip install -r requirements.txt
requirements.txt的具体内容
allure-pytest==2.9.43
allure-python-commons==2.9.43
astroid==2.7.3
attrs==21.2.0
autopep8==1.5.7
certifi==2021.5.30
charset-normalizer==2.0.4
idna==3.2
iniconfig==1.1.1
isort==5.9.3
lazy-object-proxy==1.6.0
mccabe==0.6.1
packaging==21.0
platformdirs==2.3.0
pluggy==1.0.0
py==1.10.0
pycodestyle==2.7.0
pylint==2.10.2
pyparsing==2.4.7
pytest==6.2.5
pytest-assume==2.4.3
pytest-html==3.1.1
pytest-metadata==1.11.0
PyYAML==5.4.1
requests==2.26.0
six==1.16.0
toml==0.10.2
urllib3==1.26.6
wrapt==1.12.1
安装完成之后我们的环境就搭建好了。
yaml管理测试用例
excel这种总归是太麻烦了,所以我们需要一个更合适的。挑来选去yaml是最简单方便的,数据能几乎无缝切换。
先来看看我们的用例吧,都写了些什么。打开tests/testcase.yaml
文件,输入以下内容。
config: # 测试信息
baseurl: "https://www.zhixue.com"
timeout: 30.0
headers:
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
cookies: aliyungf_tc=AQAAANNdlkvZ2QYAIb2Q221oiyiSOfhg; tlsysSessionId=cf0a8657-4a02-4a40-8530-ca54889da838; isJump=true; deviceId=27763EA6-04F9-4269-A2D5-59BA0FB1F154; 6e12c6a9-fda1-41b3-82ec-cc496762788d=webim-visitor-69CJM3RYGHMP79F7XV2M; loginUserName=18291900215
X-Requested-With: XMLHttpRequest
variable:
none : none
tests:
test_login:
description: "登录"
method: post
route: /weakPwdLogin/?from=web_login
RequestData:
data:
loginName: 18291900215
password: dd636482aca022
code:
description: encrypt
Validate:
expectcode: 200
resultcheck: '"result":"success"'
regularcheck: '[d]{16}'
Extract:
- data
test_login_verify:
description: "验证登录"
method: post
route: /loginSuccess/
RequestData:
data:
userId: "${data}"
Validate:
expectcode: 200
regularcheck:
resultcheck: '"result":"success"'
第一部分config
内容:主要是一些全局的配置信息,如请求地址、请求头等。
第二部分variable
内容:主要是预先设置一些全局变量等等内容。比如可以加入邮箱地址等等。
第三部分tests
内容:这个是真正的测试用例部分,通过匹配requests
库的输入参数,以简洁明了的写法更好的支持测试。
好了我们的准备工作已经全部做完了,下一章就可以开始写点脚本了。