一文3000字从0到1用【 pytest+excel】实现自动化接口测试

项目结构

1.common 存放公用方法

    login.py 前置条件类
    public.py 获取文件指定目录类`
复制代码

2. base 存放底层方法类

  method.py
  
复制代码

3. data 存放数据

  data.xls
复制代码

4. tests 存放用例类 pytest

      test_excel.py
      
5. utils存放工具类

    operationExcel.py
复制代码

代码编写

  1. 底层request封装(base)
#封装requests方法
import requests

class ApiRequest(object):
    def send_requests(self, method, url, data=None, params=None, headers=None, cookies=None, json=None,
                      files=None, auth=None, timeout=None, proxies=None, verify=None, cert=None):

        self.r = requests.request(method=method, url=url, data=data, params=params, headers=headers, cookies=cookies, json=json,
                      files=files, auth=auth, timeout=timeout, proxies=proxies, verify=verify, cert=cert)
        return self.r
复制代码
  1. 获取指定目录下案例集(common)
os.path.dirname(__file__) #获取当前目录
os.path.dirname(os.path.dirname(__file__)) #获取当前目录的上一级目录

#获取指定的目录
def fileDir(data):
    base_path=os.path.dirname(os.path.dirname(__file__))
    return os.path.join(base_path,data) #将获取到的目录返回  ##返回通过指定字符连接序列中元素后生成的新字符串。str.join(元祖)

# 获取路径下的文件,调用需要传递两个参数替换,否则使用默认的参数
def filePath(fileDir="data", fileName="data.xls"):
    """
    :param fileDir: 目录
    :param fileName: 文件名称
    :return: 返回
    """
    return os.path.join(os.path.dirname(os.path.dirname(__file__)), fileDir, fileName)
复制代码

总结: 1. os.path用法 2. join用法

  1. 编写测试案例(data)data.xls

  1. 自动化tests(pytest)
import pytest
import json
from utils.operationExcel import OperationExcel
from common.login import login_token
from base.method import ApiRequest


class Test_gwyc_api():
    # def testApi(self):
    #     data = OperationExcel().getExcelData()
    #     for i in data:
    #         assert i == 1
    #
    #     assert 1==2

    @pytest.mark.parametrize('data', OperationExcel().getExcelData()) #装饰器进行封装用例
    def test_excel(self, data, login_token):
        #拿到token
        assert login_token != None

        # 对请求头做为空处理并添加token
        headers = data[OperationExcel().case_headers]
        if len(str(headers).split()) == 0:
            headers = None
        elif len(str(headers)) >= 0:
            headers = json.loads(headers) #转换为字典
            headers['X-AUTH-TOKEN'] = login_token
            headers = headers

        # 对请求参数做为空处理
        params = data[OperationExcel().case_data]
        if len(str(params).split()) == 0:
            params = None
        elif len(str(params)) == 0:
            params = params

        #断言封装
        case_code = int(data[OperationExcel().case_code])
        def case_result_assert(r):
            assert int(r.json()['code']) == case_code #状态码
            # TODO 响应值
            #期望值 字典与字典的比较
            # case_result = json.dumps(data[OperationExcel().case_result].strip())
            # r_result = json.dumps(r.json(), ensure_ascii=False)
            # assert data[OperationExcel().case_result] in json.dumps(r.json(), ensure_ascii=False) #响应数据

        #执行用例
        if data[OperationExcel().case_method] == 'get':
            r = ApiRequest().send_requests(
                method='get',
                url=data[OperationExcel().case_url],
                data=params,
                headers=headers)

            case_result_assert(r=r)
        elif data[OperationExcel().case_method] == 'post':
            r = ApiRequest().send_requests(
                method='post',
                url=data[OperationExcel().case_url],
                data=params,
                headers=headers)

            case_result_assert(r=r)

if __name__ == '__main__':
    pytest.main(['-m', 'test_gwyc_api_all.py'])
复制代码

总结: pytest 用例类Test,首字母一定要大写

  • pytest.mark.parametrize是pytest自带的ddt
  • 装饰器的使用
  • 内部类的使用,内部类与装饰器有什么不同
  • 期望值 todo 还没想好怎么断言比较好
  1. login.py 前置条件类(common)
import pytest
    import requests

    @pytest.fixture(scope='module') #fixture整个模块运行一次里面的方法
    def login_token():
      url = "http://****/sso-login"
      headers = {"Content-Type":"application/json"}
      data = {"name":(None, "usename"),"password":(None, "11111")}
      r = requests.post(url=url, files=data)
      return str(r.json()["data"]["X-AUTH-TOKEN"])

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

猜你喜欢

转载自blog.csdn.net/jiangjunsss/article/details/129730689