设计框架目录
见名知意,根据自己的习惯喜好创建名称
Api:根据接口文档,编写单接口API
Common:公用方法
Config:配置文件
Data:数据参数
Log:日志相关
Main:主方法执行
Report:测试报告
TestCase:测试用例,断言结果
在 Common 里封装方法
封装request方法
创建 requests.py 文件,将常用方法封装,Api里的单接口可直接调用,我这里只封装 get和 post 请求
import requests
class request:
def get(self,**kwargs):
'''封装 get 方法'''
url = kwargs.get('url')
headers = kwargs.get('headers')
params = kwargs.get('params')
result=requests.get(url=url,headers=headers,params=params)
return result.json()
def post(self,**kwargs):
'''封装 post 方法'''
url = kwargs.get('url')
headers = kwargs.get('headers')
json = kwargs.get('json')
params = kwargs.get('params')
data = kwargs.get('data')
result = requests.post(url=url, headers=headers,json=json,data=data)
return result.json()
Api 下写单接口 api
以登录接口为例,继承 requests.py的 request,测试一下是否登录成功
from apiAutomation.Common.requests import request
class login(request):
def login(self):
url='http://***/login.html'
headers= {'X-Requested-With': 'XMLHttpRequest'}
data={'user': 'aa', 'pwd': '123456'}
result=request.post(self,url=url,headers=headers,data=data)
return result
上述 url headers data 数据可以提取出来放到 yaml文件中管理
3.创建yaml文件
在 Data 中创建 data.yaml 文件,将需要的数据写入文件中
如下:
login_url: 'http://***/login.html'
headers: {'X-Requested-With': 'XMLHttpRequest'}
data: {'user': 'aa', 'pwd': '123456'}
4.封装读取yaml文件的方法
在 Common 中创建 getData.py,获取 yaml 中的数据,存入 data 对象里
import yaml
class getData:
def __init__(self):
self.path='../Data/data.yaml'
with open(self.path, 'r', encoding='utf-8') as f:
self.data = yaml.safe_load(f)
def get_data(self):
return self.data
5. API请求通过 yaml参数化
将单接口 api 优化一下,login()里面的参数通过 yaml 管理,login_v()封装成传参数的形式
from apiAutomation.Common.requests import request
from apiAutomation.Common.getData import getData
class login(request):
def __init__(self):
self.data=getData().get_data()
def login(self):
url=self.data['login_url']
headers= self.data['headers']
data=self.data['data']
result=request.post(self,url=url,headers=headers,data=data)
return result
def login_v(self,**kwargs):
url = kwargs.get('url')
headers = kwargs.get('headers')
json = kwargs.get('json')
params = kwargs.get('params')
data = kwargs.get('data')
result=request.post(self,url=url,headers=headers,data=data)
return result
在 testCase 下创建 case
创建 test_login.py 文件
from apiAutomation.Api.loginApi import class_login
import pytest
class Test_case:
def test_login(self):
obj=class_login()
result=obj.login().json()
msg=result['msg']
assert msg=='登录成功'
if __name__ == '__main__':
pytest.main(['-s','test_login.py'])
执行测试
plugins: allure-pytest-2.8.16, assume-2.4.2, html-3.1.1, metadata-1.11.0
collected 1 item
test_login.py .
============================== 1 passed in 0.17s ===============================
Process finished with exit code 0
使用allure生成报告
安装 allure
pip3 install allure-pytest
命令行执行测试,并收集结果 --alluredir 提供存储结果的路径
python3 -m pytest -s --alluredir ./apiAutomation/Reports/Raw/
在 apiAutomation/Reports下会产生一个目录 Raw,里面有一些名字比较奇怪的文件 如下图:
执行命令,生成好看的报告
allure generate ./apiAutomation/Reports/Raw/ -o ./apiAutomation/Reports/html/ --clean
在apiAutomation/Reports/中会生成 html 文件夹,index.html 就是生成的界面报告,在 pycharm 中选择该文件,右键选择 open in Browser 选择喜欢的浏览器打开就可以了