【Python 5】----Pytest接口自动化(实现基础的测试框架)

  • 安装准备

  • 安装好pytest的环境及allure环境

1. 安装pytest    pip insatll pytest

2.安装allure (需要确保安装了jdk环境)

  安装allure命令行:  访问allure官网,下载allure2.13.5的安装包,将其bin路径
添加进环境变量path中

  在cmd里面输入allure  version来进行版本的安装
  • 接口关键字封装 

  • 定义:将接口测试过程中常用的操作和验证封装成可复用的关键字 (或称为函数、方法),以提高测试代码的可维护性和可复用性

  • 接口关键字封装方式

  1. 发送请求    2.提取数据
from urllib import response
import requests
import  jsonpath
import json

#关键字驱动

#发送请求 ,8种   post/get
class Apikey():
    def get(self,url,params=None,**kwargs):
        """
        :param url: 请求的URL
        :param params: 需要拼装在URL当中的参数
        :param kwargs: 其它参数,具体参考requests.post()
        :return: 响应数据
        """
        return requests.get(url=url,params=params,**kwargs)

   #发送post请求
    def post(self,url, data=None, json=None, **kwargs):
        """
        :param url: 请求的URL
        :param data: 请求参数
        :param json: json格式请求数据
        :param kwargs: 其他参数
        :return: 响应数据
        """
        return  requests.post(url=url,data=data,json=json,**kwargs)

#提取数据  数据源{msg:"登陆成功" }   jsonpath:$.msg
    def get_text(self,response,key):
        """
        :param response: 响应数据
        :param key: 关键字
        :return: 返回
        """
        value_list = jsonpath.jsonpath(response, key)
        return value_list[0]
#函数入口
if __name__ == '__main__':
 """
 1.实例化对象
 2.通过对应类调用对应方法
 3.提取数据
 """
ak=Apikey()
#准备好四要素
# 模拟登陆接口请求
data = {
    "accounts": "hami",
    "pwd": "123456",
    "type": "username"
}
params = {
    "application": "app",
    "application_client_type": "weixin",
}
res = ak.post(url="http://shop-xo.hctestedu.com/index.php?s=api/user/login",params=params, data=data)
print("响应数据:",res.json())
#提取数据
text=ak.get_text(res.json(), "$.msg")
print("提取数据:",text)
  • 案例二:得到数据是字符串,调用方法时怎么实现?

  • 在框架的应用

  • pytest+allure进行报告优化

  • @allure.step("生成对应测试步骤)

  • @allure.title("测试用例标题“)

  • 当一个用例里面调用多个接口时,这样语法更加简洁,生成的报告有对应层级关系

@allure.title("测试用例标题")
def test_case_name():
    with allure.step("第一步:XXXXX接口"):
        # 具体的接口请求代码
    with allure.step("第二步:XXXXX接口"):
        # 具体的接口请求代码
"""
  • 接口测试关联及全局变量的应用

  • 一个方法中对应的变量是可以调用的

  • 不同方法中的变量,可以设置对应的全局变量去进行调用(先定义后赋值)

   

  • 有时候某个变量全局都需要使用。利用pytest的测试夹具对应实现(固定命名 conftest.py)

   

  • 固定变量不会进行修改---常量命名需要大写,用一个文件去维护

  • 日志的封装

  • 在控制台上打印日志

import logging
# 设置全局日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG,format="%(asctime)s %(levelname)s %(filename)s (%(lineno)d) : %(message)s ")
logging.debug("debug信息")
logging.info("info信息")
logging.warning("warning信息")
logging.error("error信息")
logging.critical("critical信息")
  • 日志写入文件里面

import logging
file = open("log.log", mode="a", encoding="utf-8")
# 设置全局日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)s %(filename)s 
(%(lineno)d) : %(message)s ",stream=file)
logging.debug("debug信息")
logging.info("info信息")
logging.warning("warning信息")
logging.error("error信息")
logging.critical("critical信息")
  • Pytest框架中打印日志信息

  1. pytest是日志开关  pytest.ini(不能改名字,不能在文件里面写中文)

   

日志格式化:

%(asctime)s :字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelname)s : 打印日志级别名称
%(filename)s  : 打印当前执行程序名
%(lineno)d : 打印日志的当前行号
%(message)s : 打印日志信息
  1. 需要每个测试用例都产生对应日志信息  :测试夹具--在conftest里面(当执行一个case会自动调用这个方法,把数据传过来给到call,yield生成器相当于返回对象,调用完成后会回到调用的方法这;而return会返回对象后不回到调用方法这)

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值