用 pytest设计简单接口测试框架--学习笔记

设计框架目录

见名知意,根据自己的习惯喜好创建名称
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,里面有一些名字比较奇怪的文件 如下图:


image.png

执行命令,生成好看的报告

allure generate ./apiAutomation/Reports/Raw/ -o ./apiAutomation/Reports/html/ --clean

在apiAutomation/Reports/中会生成 html 文件夹,index.html 就是生成的界面报告,在 pycharm 中选择该文件,右键选择 open in Browser 选择喜欢的浏览器打开就可以了


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容