开篇碎碎念

接口测验主动化优点

清楚明了的优点便是解放双手。

  1. 能够在短时间内主动执行很多的测验用例
  2. 经过参数化和数据驱动的办法进行测验数据的变化,进步测验掩盖范围
  3. 快速反应测验执行成果和陈述
  4. 支撑继续集成和继续交给的流程
运用Requests+pytest+allure建立测验结构的目的
  1. 简化接口测验编写

    Requests库是 Python 的一个优雅且简略的 Http库,能够很方便地发送 http 恳求,接纳和处理接口回来的呼应数据

  2. 强壮的断语和校验功用

    Pytest 是一个功用强壮的测验结构,供给丰厚的断语功用,用于验证接口呼应的正确性。

  3. 美丽的测验陈述

    Allure是一个开源的测验陈述生成东西,能够生成美丽、交互式和易于理解的测验陈述。

  4. 继续集成

    运用Requests+Pytest+Allure建立的结构能够与继续集成和主动化流程集成,完成快速的接口测验。

建立进程

环境预备
  • 装置requests、pytest、allure的办法

    pip install requests

    pip install pytest

    pip install allure-pytest

    requests、pytest 的装置很简略,这儿首要讲讲如何装置 allure。

  • Windows 装置 allure

    java 装置

  1. 下载JDK

    首要我们需要下载 java 开发东西包 JDK,下载地址:www.oracle.com/java/techno…,在下载页面中依据自己的体系挑选对应的版别,本文以 Window 64位体系为例:

    Python接口自动化搭建过程,含request请求封装
    下载后东西包 jdk 后依据提示进行即可,装置 jdk 的时分也会装置 jre,一并装置就能够了。装置进程中能够自定义装置路径等信息,我挑选的装置目录为 D:\Program Files \

  2. 装备环境变量

    1. 装置完成后哦,搜索框输入”修改体系环境变量“。(或”此电脑”,右键后挑选”特点”,挑选”高级体系设置”

    2. 在体系特点里,点击”环境变量”

      在体系变量中设置特点 JAVA_HOME

Python接口自动化搭建过程,含request请求封装
3. PATH 设置

```
%JAVA_HOME%\bin;
%JAVA_HOME%\jre\bin;
```

Python接口自动化搭建过程,含request请求封装

allure 命令行东西装置

allure命令行东西 allure是一个命令行东西,需要去github上下载最新版github.com/allure-fram…

下载完成后,解压,我是放在D盘

Python接口自动化搭建过程,含request请求封装
把bin目录添加到环境变量Path下

Python接口自动化搭建过程,含request请求封装
留意: cmd命令行运行 java、javac、allure可能体现装置未成功,呈现这种情况时能够先挑选重启试试。

结构整体结构
名称 说明
api api
config 装备文件,寄存setting.ini装备文件,首要装备接口域名和mysql数据库信息
core request 恳求办法封装、关键字回来成果类
data 寄存测验用例数据
log 日志
report 测验陈述数据
testcase 测验办法
utils 东西类
pytest.ini pytest 装备文件,为运行项目的相关参数
requirements.txt 相关依靠包及版别

测验代码运用了代码分层思想,详细往后看。

  • 在testcases文件夹中,不做接口恳求和回来值的操作,用一个办法A代替,参数为恳求参数
  • 办法A中调用B办法,B办法接纳组装好的参数(包含headers)
  • B办法调用C办法,C办法接纳恳求参数,参数为接口路径(不包含域名)和 **kwargs(接纳B办法中组装好的参数) C办法参数为url,接口恳求参数: **kwargs
测验用例

创立测验文件并编写测验办法

(1).py测验文件有必要以“test ”最初(或“ test”结束)

(2)测验办法有必要以“test_”最初

(3)测验类有必要以Test最初

  • 运用 Pytest 供给的装修器 “@pytest.mark” 来标记测验用例,其间“@pytest.mark.parametrize ”用于参数化测验用例,经过装修器能够将多个参数传递给测验函数。
  • @allure.feature(“”) 是Allure插件供给的一个装修器,用于定义测验陈述中的feature(敏捷开发场景)。经过运用该装修器,能够将测验用例依照功用模块进行分类展现,供给测验陈述可读性。

如下是用户登录的一个例子,test_get_token 函数被标记为参数化测验用例,经过”@pytest.mark.parametrize“传递一个参数data和对应的值。在测验函数中,能够直接运用传递的参数进行测验逻辑,验证恳求接口回来是否经过,断语回来状况和登录令牌。

## test_user.py
@allure.feature("用户模块")
class TestUser:
   @pytest.mark.parametrize("data", get_data()['user_login'])
   @allure.story("登录-取得token")
   @allure.title("登录获取令牌测验用例")
   def test_get_token(self,data):
     result = login(data)
     assert result['body']['success'] is True
     assert len(result['body']['accessToken']) != 0 
发送恳求和处理呼应

调用requests库发送http恳求,将data参数中的恳求办法、参数和恳求体经过调用 api_util_new.do_request()发送恳求,运用response接纳接口恳求的呼应成果,并将呼应成果处理后回来。

def login(data):
   """
   获取令牌
   :param json_data
   :return:
   """
   response = client_api.do_request(url=data['url'], method=data['method'], json=data['data'])
   return process_response(response)

以下是对于接口恳求呼应成果的处理,运用字典ResultResponse存储处理后的response,查看恳求呼应状况代码以确定恳求是否成功,并提取呼应内容经过日志打印出来方便定位问题。

def process_response(response):
    ResultResponse = {}
    if response.status_code == 200 or response.status_code == 201:
        ResultResponse['success'] = True
        ResultResponse['body'] = response.json()
    else:
        ResultResponse['success'] = False
        logger.info("恳求状况反常")
    logger.info("呼应内容>>>:" + json.dumps(response.json(), ensure_ascii=False))
    return ResultResponse

封装 HTTP 恳求的类 “RestClient”,在类办法 do_request() 中,运用 request() 办法接纳接口url,接口恳求 method 和可选的其他关键字参数。在 request() 办法中,传入的 method(GET、POST、PUT、DELETE) ,运用 requests 库发送相应的 http 恳求。

class RestClient:        
   def do_request(self, url, method,**kwargs):
     return self.request(url, method, **kwargs)   
  
   def request(self, url, method, **kwargs):
     if method == "GET":
       return requests.get(self.api_root_url + url, **kwargs)
     if method == "POST":
       return requests.post(self.api_root_url + url, **kwargs)
     if method == "PUT":
       return requests.put(self.api_root_url + url, **kwargs)
     if method == "DELETE":
       return requests.delete(self.api_root_url + url, **kwargs)
client_api = RestClient()
数据驱动测验和校验
  • 经过 yaml 文件寄存测验用例数据,如下user_login_body 为用户登录数据列表,其间url为api地址,method 为恳求办法,data为恳求参数

    user_login_body:
      - url: /api/signin
       method: POST
       data: {
        username: user
        password: pwd
       }
    

    json转yaml格局的办法网上一堆,比方 bejson,而校验 yaml 书写格局的东西,能够运用 YamlLint

  • 经过装修器 @pytest.mark.parametrize,运行测验时会获取测验用例的数据去执行测验

  • 校验接口回来成果的正确性一般运用断语来完成。依据接口回来的数据结构,能够运用适当的断语函数来校验各个字段的值是否符合预期。

    Pytest 支撑运用 assert 关键字进行断语assert 函数,Pytest 供给了一些内置的断语函数

    • assertEqual(a, b)
    • assertTrue(x)
    • assertFalse(x)
    • assertIs(a, b)
    • assertIsNone(x)
    • assertIn(a, b)
    • assertNotIn(a, b)
陈述生成展现

在命令行执行命令:pytest 运行用例后,会得到一个测验陈述的原始文件,但这个时分还不能打开成HTML的陈述,还需要在项目根目录下,执行命令发动 allure 服务。下图是个成果测验成果的展现示例。

# 需要提前装备allure环境,才能够直接运用命令行
allure serve ./report

Python接口自动化搭建过程,含request请求封装

allure测验陈述结构是一个开源的测验陈述生成东西,它供给了丰厚的功用和灵活的装备选项,用于生成美丽、可交互和易于理解的测验陈述。基本进程如下:

  • 结构集成:经过与 Pytest 集成 ,运用 Pytest 结构供给的插件机制,将测验成果和相关信息搜集起来。
  • 成果搜集: allure 搜集 Pytest 生成的测验成果数据,成果数据中包含测验用例的执行状况、断语成果、日志信息等。
  • 陈述生成: allure 运用搜集到的数据转换为 xml 格局,并运用陈述模板和样式表定义,渲染出美丽的 html 文件。
继续集成
  • Jenkins中装置Allure插件 Allure Jenkins Plugin

  • 添加接口主动化测验的代码

  • 触发规矩我挑选的是预备发布打tag 后,主动执行构建

      cd ${WORKSPACE}
      pytest
    

总结

本项目在完成进程中,把整个项目拆分红恳求办法封装、HTTP接口封装、关键字封装、测验用例等模块。

首要运用Python把HTTP接口封装成Python接口,接着把这些Python接口组装成一个个的关键字,再把关键字组装成测验用例,而测验数据则经过YAML文件进行统一管理,然后再经过Pytest测验执行器来运行这些脚本,并结合Allure输出测验陈述。