pytest+pycharm+HTMLTestReportCN实现接口自动化

前提:已安装pycharm,已配置python环境

第一步:新建一个py类,用来执行all的测试用例

import HTMLTestReportCN
import unittest, os, yagmail

# -*- coding: utf-8 -*-
"""
@Time : 2024/9/2 14:50
@Auth : dongjinjin
@IDE :PyCharm
"""

def run_case(fileName, htmlName):
    #获取当前文件的路径
    test_dir = os.path.dirname(__file__)
    #定义执行gfyl_case.py用例
    discover = unittest.defaultTestLoader.discover(test_dir, pattern=fileName)
    print(discover)
    #定义存储测试报告的路径和文件名
    filename = os.path.dirname(os.path.dirname(test_dir)) + '/py-test-gfyl/report/' + htmlName

    fp = open(filename, 'wb')
    runner = HTMLTestReportCN.HTMLTestRunner(stream=fp, title='接口自动化测试报告', description='Implementation Example with: ',
                                             tester='dongjinjin')
    print("""
            测试进行中,请耐心等候......
            """)
    try:
        #执行用例
        runner.run(discover)
    except Exception as e:
        raise e
    else:
        print('测试结束,测试运行无异常')
    fp.close()
    email = yagmail.SMTP(user='1578845978@qq.com', password='tonhkqehtmnnibdf', host='smtp.qq.com')
    # 设置测试结果报告接收人邮箱及内容
    email.send(to='1578845978@qq.com', subject='接口自动化测试报告', contents='您好请查收', attachments=filename)

if __name__ == '__main__':
    # 设置执行测试用例的文件和生成的测试报告文件名 并执行该脚本
    run_case('gfyl_cases.py', 'walletResult.html')

第二步:定义一个requests请求类,包括GET、POST接口请求方法

# -*- coding: utf-8 -*-
"""
@Time : 2024/9/2 15:43
@Auth : dongjinjin
@IDE :PyCharm
"""
import requests
from urllib.parse import urlparse, parse_qs

class h5apirequests:

    base_url = "接口url"
    token_value = None  # 类变量,用于存储token
    @classmethod
    def setUp(cls):
        # 目标URL
        url = "h5访问链接url"

        # 发送GET请求
        response = requests.get(url)

        # 从响应中获取cookie
        cookies = response.url

        # 解析URL
        parsed_url = urlparse(cookies)
        query_params = parse_qs(parsed_url.fragment)  # 因为token在hash后面,所以使用fragment

        # 获取token值
        cls.token_value = query_params.get('token', [None])[0]  # 使用列表解析并获取第一个元素

        print(cls.token_value)

    @classmethod
    def send_request(cls, method, api_method, params=None, json=None):
        full_url = f"{cls.base_url}/{api_method}"  # 构建完整的URL地址
        token = cls.token_value
        headers = {
            'Content-Type': 'application/json',
            'token': token
        }

        try:
            if method.upper() == 'GET':
                response = requests.get(full_url, headers=headers, params=params)
            elif method.upper() == 'POST':
                response = requests.post(full_url, headers=headers, json=json)
            else:
                raise ValueError(f"Unsupported method: {method}")

            response.raise_for_status()  # 检查响应状态码
            return response
        except requests.exceptions.RequestException as e:
            print(f"Request failed: {e}")
            return None

# 测试代码
if __name__ == '__main__':
    h5apirequests.setUp()  # 调用setUp获取token
    instance = h5apirequests()  # 创建实例
    api_method = 'getReimbursementUser'
    params = {
        'userId': 'd7a5071c937332c819fd668ef6aa03d7'
    }
    response = instance.send_request('GET', api_method, params=params)
    if response:
        print('\n返回结果:\n%s' % response.text)
        response_data = response.json()
        response_code = response_data.get('code')
        # # 断言code值是否为200
        # if (response_code != 200):
        #     self.assertEqual(response_code, 200, "Response code is not 200")
        # else:
        #     pass

第三步:创建一个存放测试用例执行结果的包

 第四步:创建一个测试类存放单独接口调用的测试方法

import unittest

from gfyl_requests.h5apirequests import h5apirequests

class MyTestCase(unittest.TestCase):
    base_url = "接口url"

    def test_queryReferralDocuments(self):

        h5apirequests.setUp()  # 调用setUp获取token
        instance = h5apirequests()  # 创建实例
        api_method = 'queryReferralDocuments'
        params = {
            'name': '测试二',
            'jobNumber': '999999999',
            'idCard': '110123197010121234'
        }
        response = instance.send_request('POST', api_method, json=params)
        if response:
            print('\n返回结果:\n%s' % response.text)
            response_data = response.json()
            response_code = response_data.get('code')
            # 断言code值是否为200
            if (response_code != 200):
                self.assertEqual(response_code, 200, "Response code is not 200")
            else:
                pass

    def test_getReimbursementUse(self):
        h5apirequests.setUp()  # 调用setUp获取token
        instance = h5apirequests()  # 创建实例
        api_method = 'getReimbursementUser'
        params = {
            'userId': 'd7a5071c937332c819fd668ef6aa03d7'
        }
        response = instance.send_request('GET', api_method, params=params)
        if response:
            print('\n返回结果:\n%s' % response.text)
            response_data = response.json()
            response_code = response_data.get('code')
            # 断言code值是否为200
            if (response_code != 200):
                self.assertEqual(response_code, 200, "Response code is not 200")
            else:
                pass

# if __name__ == '__main__':
#     unittest.main()

第五步: 执行完all测试case,输出测试报告html格式的,可以通过浏览器打开查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值