Python接口自动化框架

整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式

主要依赖模块 Unittest、Requests、PyMysql、HTMLReport

包含以下几个模块:

1. Business:与业务相关的公共模块

  • get_login_token:接口自动化过程中需要实时获取token,并将实时获取的token传给下个接口作为请求参数
from Business.url import url_login
import requests, json


def login_token(username=11111, password=123456):
    """获取登录后的token"""

    headers = {'Content-Type': 'application/json;charset=UTF-8'}

    request_param = {
        "username": username,
        "password": password
    }
    response = requests.post(url_login, data=json.dumps(request_param), headers=headers)

    # 返回JSON中data数据的token
    print(response.json()['data']['token'])
    return response.json()['data']['token']


if __name__ == '__main__':
    login_token()
  • headers:头部信息

headers = {
    'Content-Type': "application/x-www-form-urlencoded",
    'X-Requested-With': "XMLHttpRequest",
    'Content-Length': "124",
    'Connection': "keep-alive"
    }
  • url:对应的URL地址
erp_url = 'https://www.baidu.com'

2. Common:与业务无关公共模块

  • connect_db:连接数据库,并操作数据库
import pymysql


# python3用的是pymysql,python2用的是MySQLdb

class OperationMysql:
    """
    数据库SQL相关操作
    """

    def __init__(self):
        self.conn = pymysql.connect(
            host='127.0.0.1',
            port=3306,
            user='test',
            passwd='111111',
            db='test',
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor
        )
        self.cur = self.conn.cursor()

    # 查询一条数据
    def search_one(self, sql):
        self.cur.execute(sql)
        result = self.cur.fetchone()  # 只显示一行结果
        # result = self.cur.fetchall()  # 显示所有结果
        return result

    # 更新SQL
    def updata_one(self, sql):
        self.cur.execute(sql)
        self.conn.commit()
        self.conn.close()


if __name__ == '__main__':
    op_mysql = OperationMysql()
    res = op_mysql.search_one("SELECT *  from odi_order WHERE order_no='12222'")
    print(res)

3.TestCase:测试用例层

  • test_case:用例数据
import unittest
from HTMLReport import logger
import requests

from Business.url import erp_url


class Category(unittest.TestCase):
    """ERP属性接口"""

    def setUp(self):
        self.session = requests.Session()
        logger().info("获取会话")

    def tearDown(self):
        self.session.close()
        logger().info("关闭会话")

    def test_type_list(self):
        """get请求方式"""
        s = self.session
        querystry = {}
        r = s.get(erp_url + '/xxx.list', params=querystry)
        logger().info(f"返回数据{r.json()}")
        self.assertEqual("success", r.json().get("msg"))
     def test_pay_success_recommend(self):
	     """Post请求方式"""
	     s = self.session
	     payload = {
	         "token": login_token,
	         "p": "ios",
	         "v": "5.6.0",
	         "order_no": "111111"
	     }
	     r = s.post(erp_url + '/xxxxx/aaa', data=payload)
	     logger().info(f"返回数据:{r.json()}")
	     self.assertEqual('success', r.json().get('msg'))

4.TestSuite:测试套件封装

  • suite_api:测试套件
import unittest
from Test_Case.refactor import test_order


def get_suite():
    suite = unittest.TestSuite()
    loader = unittest.TestLoader()

    suite.addTests(loader.loadTestsFromTestCase(test_order.Apitests))

    return suite

5.Run:主运行文件

import unittest
from Test_Suite import suite_api
import HTMLReport
import time
suite = unittest.TestSuite()
suite.addTests(suite_api.get_suite())
HTMLReport.TestRunner(
    title="XXX项目测试报告",
    description="测试人员:CesareCheung",
    report_file_name=f"testreport",
    thread_count=50
).run(suite)

6.框架整体结构图:

在这里插入图片描述

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CesareCheung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值