开篇碎碎念
接口测验主动化优点
清楚明了的优点便是解放双手。
- 能够在短时间内主动执行很多的测验用例
- 经过参数化和数据驱动的办法进行测验数据的变化,进步测验掩盖范围
- 快速反应测验执行成果和陈述
- 支撑继续集成和继续交给的流程
运用Requests+pytest+allure建立测验结构的目的
-
简化接口测验编写
Requests库是 Python 的一个优雅且简略的 Http库,能够很方便地发送 http 恳求,接纳和处理接口回来的呼应数据
-
强壮的断语和校验功用
Pytest 是一个功用强壮的测验结构,供给丰厚的断语功用,用于验证接口呼应的正确性。
-
美丽的测验陈述
Allure是一个开源的测验陈述生成东西,能够生成美丽、交互式和易于理解的测验陈述。
-
继续集成
运用Requests+Pytest+Allure建立的结构能够与继续集成和主动化流程集成,完成快速的接口测验。
建立进程
环境预备
-
装置requests、pytest、allure的办法
pip install requests
pip install pytest
pip install allure-pytest
requests、pytest 的装置很简略,这儿首要讲讲如何装置 allure。
-
Windows 装置 allure
java 装置
-
下载JDK
首要我们需要下载 java 开发东西包 JDK,下载地址:www.oracle.com/java/techno…,在下载页面中依据自己的体系挑选对应的版别,本文以 Window 64位体系为例: 下载后东西包 jdk 后依据提示进行即可,装置 jdk 的时分也会装置 jre,一并装置就能够了。装置进程中能够自定义装置路径等信息,我挑选的装置目录为 D:\Program Files \
-
装备环境变量
-
装置完成后哦,搜索框输入”修改体系环境变量“。(或”此电脑”,右键后挑选”特点”,挑选”高级体系设置”
-
在体系特点里,点击”环境变量”
在体系变量中设置特点 JAVA_HOME
-
3. PATH 设置
```
%JAVA_HOME%\bin;
%JAVA_HOME%\jre\bin;
```
allure 命令行东西装置
allure命令行东西 allure是一个命令行东西,需要去github上下载最新版github.com/allure-fram…
下载完成后,解压,我是放在D盘
把bin目录添加到环境变量Path下
留意: cmd命令行运行 java、javac、allure可能体现装置未成功,呈现这种情况时能够先挑选重启试试。
结构整体结构
名称 | 说明 |
---|---|
api | api |
config | 装备文件,寄存setting.ini装备文件,首要装备接口域名和mysql数据库信息 |
core | request 恳求办法封装、关键字回来成果类 |
data | 寄存测验用例数据 |
log | 日志 |
report | 测验陈述数据 |
testcase | 测验办法 |
utils | 东西类 |
pytest.ini | pytest 装备文件,为运行项目的相关参数 |
requirements.txt | 相关依靠包及版别 |
测验代码运用了代码分层思想,详细往后看。
- 在testcases文件夹中,不做接口恳求和回来值的操作,用一个办法A代替,参数为恳求参数
- 办法A中调用B办法,B办法接纳组装好的参数(包含headers)
- B办法调用C办法,C办法接纳恳求参数,参数为接口路径(不包含域名)和 **kwargs(接纳B办法中组装好的参数) C办法参数为url,接口恳求参数: **kwargs
测验用例
创立测验文件并编写测验办法
(1).py测验文件有必要以“test ”最初(或“ test”结束)
(2)测验办法有必要以“test_”最初
(3)测验类有必要以Test最初
- 运用 Pytest 供给的装修器 “@pytest.mark” 来标记测验用例,其间“@pytest.mark.parametrize ”用于参数化测验用例,经过装修器能够将多个参数传递给测验函数。
- @allure.feature(“”) 是Allure插件供给的一个装修器,用于定义测验陈述中的feature(敏捷开发场景)。经过运用该装修器,能够将测验用例依照功用模块进行分类展现,供给测验陈述可读性。
如下是用户登录的一个例子,test_get_token 函数被标记为参数化测验用例,经过”@pytest.mark.parametrize“传递一个参数data和对应的值。在测验函数中,能够直接运用传递的参数进行测验逻辑,验证恳求接口回来是否经过,断语回来状况和登录令牌。
## test_user.py
@allure.feature("用户模块")
class TestUser:
@pytest.mark.parametrize("data", get_data()['user_login'])
@allure.story("登录-取得token")
@allure.title("登录获取令牌测验用例")
def test_get_token(self,data):
result = login(data)
assert result['body']['success'] is True
assert len(result['body']['accessToken']) != 0
发送恳求和处理呼应
调用requests库发送http恳求,将data参数中的恳求办法、参数和恳求体经过调用 api_util_new.do_request()发送恳求,运用response接纳接口恳求的呼应成果,并将呼应成果处理后回来。
def login(data):
"""
获取令牌
:param json_data
:return:
"""
response = client_api.do_request(url=data['url'], method=data['method'], json=data['data'])
return process_response(response)
以下是对于接口恳求呼应成果的处理,运用字典ResultResponse存储处理后的response,查看恳求呼应状况代码以确定恳求是否成功,并提取呼应内容经过日志打印出来方便定位问题。
def process_response(response):
ResultResponse = {}
if response.status_code == 200 or response.status_code == 201:
ResultResponse['success'] = True
ResultResponse['body'] = response.json()
else:
ResultResponse['success'] = False
logger.info("恳求状况反常")
logger.info("呼应内容>>>:" + json.dumps(response.json(), ensure_ascii=False))
return ResultResponse
封装 HTTP 恳求的类 “RestClient”,在类办法 do_request() 中,运用 request() 办法接纳接口url,接口恳求 method 和可选的其他关键字参数。在 request() 办法中,传入的 method(GET、POST、PUT、DELETE) ,运用 requests 库发送相应的 http 恳求。
class RestClient:
def do_request(self, url, method,**kwargs):
return self.request(url, method, **kwargs)
def request(self, url, method, **kwargs):
if method == "GET":
return requests.get(self.api_root_url + url, **kwargs)
if method == "POST":
return requests.post(self.api_root_url + url, **kwargs)
if method == "PUT":
return requests.put(self.api_root_url + url, **kwargs)
if method == "DELETE":
return requests.delete(self.api_root_url + url, **kwargs)
client_api = RestClient()
数据驱动测验和校验
-
经过 yaml 文件寄存测验用例数据,如下user_login_body 为用户登录数据列表,其间url为api地址,method 为恳求办法,data为恳求参数
user_login_body: - url: /api/signin method: POST data: { username: user password: pwd }
json转yaml格局的办法网上一堆,比方 bejson,而校验 yaml 书写格局的东西,能够运用 YamlLint
-
经过装修器 @pytest.mark.parametrize,运行测验时会获取测验用例的数据去执行测验
-
校验接口回来成果的正确性一般运用断语来完成。依据接口回来的数据结构,能够运用适当的断语函数来校验各个字段的值是否符合预期。
Pytest 支撑运用 assert 关键字进行断语assert 函数,Pytest 供给了一些内置的断语函数
assertEqual(a, b)
assertTrue(x)
assertFalse(x)
assertIs(a, b)
assertIsNone(x)
assertIn(a, b)
assertNotIn(a, b)
陈述生成展现
在命令行执行命令:pytest
运行用例后,会得到一个测验陈述的原始文件,但这个时分还不能打开成HTML的陈述,还需要在项目根目录下,执行命令发动 allure
服务。下图是个成果测验成果的展现示例。
# 需要提前装备allure环境,才能够直接运用命令行
allure serve ./report
allure测验陈述结构是一个开源的测验陈述生成东西,它供给了丰厚的功用和灵活的装备选项,用于生成美丽、可交互和易于理解的测验陈述。基本进程如下:
- 结构集成:经过与 Pytest 集成 ,运用 Pytest 结构供给的插件机制,将测验成果和相关信息搜集起来。
- 成果搜集: allure 搜集 Pytest 生成的测验成果数据,成果数据中包含测验用例的执行状况、断语成果、日志信息等。
- 陈述生成: allure 运用搜集到的数据转换为 xml 格局,并运用陈述模板和样式表定义,渲染出美丽的 html 文件。
继续集成
-
Jenkins中装置Allure插件
Allure Jenkins Plugin
-
添加接口主动化测验的代码
-
触发规矩我挑选的是预备发布打tag 后,主动执行构建
cd ${WORKSPACE} pytest
总结
本项目在完成进程中,把整个项目拆分红恳求办法封装、HTTP接口封装、关键字封装、测验用例等模块。
首要运用Python把HTTP接口封装成Python接口,接着把这些Python接口组装成一个个的关键字,再把关键字组装成测验用例,而测验数据则经过YAML文件进行统一管理,然后再经过Pytest测验执行器来运行这些脚本,并结合Allure输出测验陈述。