python+requests+excel+pytest+allure接口自动化框架搭建

文章目录

今天整理了一下之前搭建的接口自动化框架,本项目是由python+requests+excel+pytest+allure框架构成的,针对于工作中项目搭建的。

提示:本项目通过excel编写接口测试用例,使用openpyxl库获取excel数据,封装请求方式,通过requests库发送http协议请求,使用pytest管理测试用例,生成allure报告,通过jenkins构建并定时执行脚本。

文章目录

  • 文章目录
  • 一、项目框架
  • 二、请求方法封装
    • 2.日志封装
    • 3.配置文件
    • 4.数据库的封装
    • 5.编写测试用例脚本
    • 6.执行脚本
  • 总结



提示:以下是本篇文章正文内容,下面案例可供参考

一、项目框架

python+requests+excel+pytest+allure接口自动化框架搭建_第1张图片

Common层:
1、封装requests请求方法
2、读取excel
3、封装日志
4、封装数据库
5、数据处理
6、读取配置文件
7、获取路径

conf层
1、将一些数据写入配置文件中
Output层
1、输出测试报告和日志
Test_case层
1、conftest.py文件
2、测试用例
Test_data层
1、测试数据
main
执行
pytest.ini
1、pytest.ini配置文件

二、请求方法封装

代码如下(示例):

def send_request(method,url,datas=None):
    if method == "post" or method == "POST":
        res=requests.post(url,params=data,headers=header)
    elif method == "get" or method == "GET":
        res=requests.get(url,params=data,headers=header)
    elif method == "put" or method == "PUT":
        res=requests.put(url,params=data,headers=header)
    elif method == "delete" or method == "DELETE":
        res=requests.delete(url,params=data)
    else:
        res=None
    return res

2.日志封装

代码如下(示例):

class Handel_logger(logging.Logger):

    def __init__(self, filename=None):
        '''
        先设置收集器,读取日志级别
        :param filename: 输出渠道--文件
        '''
        #设置收集器
        log_name=conf.get("log","log_name")
        # 设置日志级别
        log_level = conf.get("log", "log_level")
        super().__init__(log_name,log_level)

        #设置输出格式:
        fmt=' %(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d: %(message)s'
        formatter=logging.Formatter(fmt)
        # 设置输出渠道---控制台
        console = logging.StreamHandler()
        #将日志格式绑定到输出渠道中
        console.setFormatter(formatter)
        #将输出渠道添加到日志收集器中
        self.addHandler(console)
        #判断是否要将日志输出到日志文件
        if filename:
            # 设置输出渠道---控制台
            output_file = logging.FileHandler(filename,encoding="utf-8")
            output_file.setFormatter(formatter)
            self.addHandler(output_file)

3.配置文件

[log]
log_name = loggers.log
log_level = INFO
log_file = xxx

[case_data]
url = http://xxx/
mobile = xxx
password = xxx

[mysql]
host = xxx
port = xxx
user = xxx
password = xxx
database = xxx
charset = utf8

4.数据库的封装

class Handle_db:

    def __init__(self):
        '''
        初始化:连接数据库
        步骤:1、连接数据库
             2、创建游标
             3、获取数据库数据
             4、关闭数据库
        host:
        port:
        user:
        password:
        databases:
        charset:
        cursorclass:
        '''
        self.conn=pymysql.connect(
            host=conf.get("xxx","xxx"),
            port=conf.get("xxx","xxx"),
            user=conf.get("xxx","xxx"),
            password=conf.get("xxx","xxx"),
            database=conf.get("xxx","xxx"),
            charset=conf.get("xxx","xxx"),
            cursorclass=pymysql.cursors.DictCursor

        )

        #创建数据库游标
        self.cur=self.conn.cursor()
    #获取结果次数
    def get_count(self,sql):
        self.conn.commit()
        count=self.cur.execute(sql)
        return count
    #获取一条结果
    def get_onedata(self,sql):
        self.conn.commit()
        self.cur.execute(sql)
        return self.cur.fetchone()

    #获取所有结果
    def get_alldata(self,sql):
        self.conn.commit()
        self.cur.execute(sql)
        return self.cur.fetchall()
    #更新数据库
    def updata(self,sql):
        try:
            self.cur.execute(sql)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            raise

    #关闭数据库
    def close_db(self):
        self.cur.close()
        self.conn.close()

5.编写测试用例脚本

@pytest.mark.usefixtures("init")
class Test_login:
    @pytest.mark.parametrize("case",cases)
    def test_login(self,case):
        res=send_request(case["method"],case["url"],case["request_data"])
        expect=json.loads(case["expect"])
        logger.info("响应结果为:{}".format(res.json()))
        logger.info("期望结果为:{}".format(expect))
        if case["expect"]:
            try:
                assert res.json()["code"]==expect["code"]
                assert res.json()["msg"] == expect["msg"]
            except Exception as e:
                logger.info("断言失败")
                raise
            return res

6.执行脚本

import pytest

pytest.main(["-s",
             "-v",
             "-m","sign",
             "--html=pyreports.html",
             "--alluredir=allure_dir",
             "--reruns","2","--reruns-delay","5"])

## 7.allure

python+requests+excel+pytest+allure接口自动化框架搭建_第2张图片

总结

提示:其余内容涉及项目暂不展示

你可能感兴趣的:(python,python,自动化,开发语言)