iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python接口自动化测试(一)
  • 750
分享到

python接口自动化测试(一)

python开发语言 2023-09-01 19:09:25 750人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

一.既然我们有这些的接口测试工具,为什么要做接口做自动化? 敏捷开发,接口一般数量很大,团队实现接口测试,版本控制。 2、功能太死板,有些接口完全无法实现(复杂的加密接口,签名接口等) 3、接口项目当

一.既然我们有这些的接口测试工具,为什么要做接口做自动化?

敏捷开发,接口一般数量很大,团队实现接口测试,版本控制。
2、功能太死板,有些接口完全无法实现(复杂的加密接口,签名接口等)
3、接口项目当中有多种不同协议的接口。
4、排错,定位接口问题不方便,结合抓包实现。
5、没有办法生成美观的报告。
6、多接口串联,数据库验证,日志监控
7、有些公司做WEB自动化+接口自动化。

二、python+requests模块

requests第三方库,主要用于发送http请求,做接口自动化。

#安装pip install requests

三、接口自动化之requests全局观

请求
requests. get()发送get请求
requests. post()发送post请求
requests. delete()发送delete请求
requests .put()发送put请求
requests. request()最核心的方法
import requestsrep = requests.request();
响应
rep.text返回字符串的数据(文本格式)
rep.content返回字节格式的数据(图片、文件)
rep.JSON()返回字典格式的数据(json格式)
rep.status_code状态码
rep.reason返回状态信息
rep.cookies返回cookie信息
rep.encoding返回编码格式
rep.headers返回响应头信息

四、接口实战

请求方式:get post put delete
请求参数类型: 键值对,JSON格式,文件格式

unittest、pytest管理用例框架

前提是要安装pytest

pip install pytest

pytest默认规则:
1.py文件必须以test _ 开头或者 _ test结尾。
2类名必须以 Test 开头
3.测试用例必须以 test_ 开头

注意:

1、get请求通过params传递参数。
2、post请求通过json或者data传参。他们的区别是什么?data数据报文: dict字典类型,那么默认情况下请求头: application/x-www-fORM-urlencoded,表示以form表单的方式传参,格式: a=1&b=2&c=3数据报文: str类型,那么默认情况下: text/plain(如果是字典格式需要转换成str格式传参)json数据报文:不管是dict还是str类型,默认都是application/json ,格式: ({"a":1,"b".2)data = {"tag": {"id": 134, "name": "广东人"}}rep = requests.post(url=url, data=json.dumps(data))json.dumps(data)序列化把字典格式的数据转换成str格式.json.loads(data)反序列化把str格式转换成字典格式总结:data只能传递简单的只有键值对的dict或者是str格式。json一般只能传dict格式(简单和嵌套都可以)
#3、文件传参files,且一定要opendata={     "media":open(r"E:\shu.png","rb")}rep = requests.post(url=url, files=data)
#  以下代码运行不起来,但是写法没错import pytestimport requestsclass TestSendRequest:    access_token=""    def test_get_token(self):        # 发送get请求        url = "https://api.weixin.qq.com/cgi-bin/token"        data = {            "grant_type": "client_credential",            "appid": "自己找素材",            "secret": "自己找素材"        }        rep = requests.get(url=url, params=data)        print(rep.json())        TestSendRequest.access_token = rep.json()["access_token"]    def test_edit_flag(self):        # 发送post请求(data和json只需要传一个,data和json的区别)        url = "Https://api.weixin.qq.com/cgi-bin/token/tags/update?access_token=" + TestSendRequest.access_token + ""        data = {"tag": {"id": 134, "name": "广东人"}}        rep = requests.post(url=url, json=data)        print(rep.json())if __name__ == '__main__':    #-vs 打印调试信息    pytest.main(['-vs'])

cookie鉴权: 网页的接口基本上都要做cookie鉴权。(不常用)
给了token和请求头,但是请求还是fail,需要做cookie鉴权

import reimport pytestimport requestsclass TestSendRequest:    cks=""        #需要带请求头的接口以及需要cookie关 联的接口如何测试?    def test_start(self):        url = "http://47.107.116.139/PHPwind/"        rep=requests.get(url=url)        print (rep.text)        #通过正则表达式获取鉴权码        TestSendRequest.csrf_token= re.search( 'name="csrf_token" value="(.*?)"', rep.text)[1]        print(TestSendRequest.csrf_token)        TestSendRequest.cks=rep.cookies    #请求需要带请求头的接口    def test_login(self) :        url = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"        data = {            "username" : "msxy",            "passWord" :"msxy",            "csrf_token": TestSendRequest.csrf_token,            "backurl": "http://47. 107.116.139/ phpwind/",            "invite": ""        }        headers = {            "Accept": "application/json,text/ javascript, / ; q=0.01",            "X一Requested-With" : "XMLHttpRequest"        }        rep = requests. post (url=url, data=data , headers=headers,cookies=TestSendRequest.cks )        print (rep.json() )if __name__ == '__main__':    #-vs 打印调试信息    pytest.main(['-vs'])

通过session实现cookie鉴权(常用)

import reimport pytestimport requestsclass TestSendRequest:csrf_token=""    session = requests.session()        #需要带请求头的接口以及需要cookie关 联的接口如何测试?    def test_start(self):        url = "http://47.107.116.139/phpwind/"        rep=requests.get(url=url)        print (rep.text)        #通过正则表达式获取鉴权码        TestSendRequest.csrf_token= re.search( 'name="csrf_token" value="(.*?)"', rep.text)[1]        print(TestSendRequest.csrf_token    #请求需要带请求头的接口    def test_login(self) :        url = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"        data = {            "username" : "msxy",            "password" :"msxy",            "csrf_token": TestSendRequest.csrf_token,            "backurl": "http://47. 107.116.139/ phpwind/",            "invite": ""        }        headers = {            "Accept": "application/json,text/ javascript, / ; q=0.01",            "X一Requested-With" : "XMLHttpRequest"        }        rep = TestSendRequest.session.post (url=url, data=data , headers=headers)        print (rep.json() )if __name__ == '__main__':    #-vs 打印调试信息    pytest.main(['-vs'])

接口自动化测试框架封装

第一步 统一请求方式

rep=requests.request(请求方式,地址,参数…)

def test_get_token(self):        # 发送get请求        url = "https://api.weixin.qq.com/cgi-bin/token"        data = {            "grant_type": "client_credential",            "appid": "wx6b11b3efd1cdc290",            "secret": "106a9c6157c4db5f602991873819529d"        }        rep = requests.request("get",url=url, params=data)        print(rep.json())        TestSendRequest.access_token = rep.json()["access_token"]

Pytest全局观

它可以和所有的自动化测试工具selenium、requests、appium结合实现web自动化、接口自动化以及app自动化;
2、跳过用例、失败用例重跑;
3、结合allure生成美观的测试报告;
4、和jenkins持续集成;
5、有很多的强大插件

1、常用操作(一)

项目的在根目录下创建requirements.txt文件
注意(#是我自己为了方便看代码的解释,复制请删除)

#pytest框架pytest#生产html测试报告pytest-html#多线程运行pytest-xdist#改变测试用例的执行顺序pytest-ordering#失败用例重跑pytest-rerunfailures#生产allure测试报告allure-pytest
#在命令窗口使用 安装这个文件里面的插件pip install -r requirements.txt 

2、常用操作(二)运行方式

在根目录下创建python.ini文件

#提示这是pytest文件[pytest]#执行方法,-m "smoke" 只执行冒烟用例,要想执行其他用例  删除-m以及后面的addopts = -vs -m "smoke"#文件路径testpaths = ./ui#文件以test_开头Python_files = test_*.py#类名以Test开头python_classes = Test*#用例以test_开头python_functions = test_*#对用例进行分组 在用例上@pytest.mark.smoke,就执行加了这样的用例markers =    smoke:maoyan

若没有建立python.ini文件
在主程序中输出结果如下表达:

if __name__ == '__main__':    '''    v   输出更加详细的运行信息    -s  输出调试信息    -n  多线程运行    --reruns数字  失败用例重跑    --html='报告的路径'    '''    #写了pytest.ini    pytest.main()    # pytest.main(['-vs','-n=2'])    # pytest.main(['-vs','--reruns=2'])    # pytest.main(['-vs','--html=./report.html'])    

3、常用操作(三)前置后置

setUp()/tearDown() 在每个用例之前/之后执行一次
setUp_class()/tearDown_class() 在每个之前/之后执行一次

实现部分的前置

部分前置:
@pytest.fixture(scope=“作用域”,params=“数据驱动”,autouse=“自动执行”,ids=“自定义参数名”,name=“重命名”)
作用域: function(默认)、classmodulepackage/session

import requestsimport reimport pytest#部分前置@pytest.fixture(scope="function")def conn_database():    print("连接数据库")    #可以通过yield唤醒teardown的功能,就是返回,yield和return都有返回数据的意思#但是yield返回多次及多个数据,return只返回一次且return后面的代码不执行    yield    print("关闭数据库")```class Test:    def test_edit_flag(self,conn_database):        url=''        data={"tag":{"id":134,"name":"小李"}}        rep=Test.session.request('post',url,json=data

一般情况下:
@pytest.fixture()conftest.py文件一起使用
conftest.py文件
1.conftest.py:文件是单独存放**@pytest.fixture()**的方法,可以实现多个py文件共享前置配置
2.conftest.py:不需要导入直接使用,可以直接使用
3.conftest.py:可以有多个,也可以有多个不同层级

import pytest@pytest.fixture(scope="function")def conn_database():    print("连接数据库")    yield    print("关闭数据库")

4、接口自动化测试框架封装(接口关联封装)

创建 common 文件夹,创建 yaml_util.py 文件

import osimport yamlclass YamlUtil:    #读取extract.yml文件    def read_extract_yaml(self,key):        with open(os.getcwd()+"./extract.yml",mode="r",encoding="utf-8") as f:            value=yaml.load(stream=f,Loader=yaml.FullLoader)            return value[key]    #写入extract.yml文件    def read_extract_yaml(self,data):        with open(os.getcwd()+"./extract.yml",mode="w",encoding="utf-8") as f:            yaml.dump(data=data,stream=f,allow_unicode=True)    #清除extract.yml文件    def clearn_extract_yaml(self):        with open(os.getcwd()+"./extract.yml",mode="w",encoding="utf-8") as f:            f.truncate()

创建extract.yml文件
3、创建conftest.py文件

import pytestfrom common.yaml_util import YamlUtil#autouse  自动执行,无需调用#scope 作用域(session)@pytest.fixture(scope="session",autouse=True)def clearn_Yaml():    YamlUtil().clearn_extract_yaml()

5、pytest断言

# result ==>{"errcode": 0,"message":"数据返回成功"}result = rep.json()# 第一种assert result['errcode'] == 0#第二种assert 'errcode' in rep.json()#比较多个或者用andassert 'errcode' in rep.json()assert 'message' in rep.json()assert 'errcode' in rep.json() and 1==1

6、allure-pytest生成allure测试报告

6.1、官网下载allure:

https://github.com/allure-framework/allure2/releases
下载 .zip 的包,放到没有中文的路径下,然后把E:\allure-2.13.7\bin配置到环境变量的path里面哦

6.2、重启PyCharm 通过:allure --version验证(若没有打开pycharm,则跳过)

6.3、执行命令

(1)在temp目录下生成临时的json文件的报告,在pytest.ini文件下写 - -alluredir ./temp
在当前目录下创建temp目录

[pytest]#执行方法addopts = -vs --alluredir ./temp#文件路径testpaths = ./ui#文件以test_开头python_files = test_*.py#类名以Test开头python_classes = Test*#用例以test_开头python_functions = test_*

(2)通过临时的json文件生成allure报告(在reports目录下),在all.py文件写
os.system(“allure generate temp -o reports --clean”)
在当前目录下创建 reports目录

import pytestif __name__ == '__main__':    pytest.main()    os.system("allure generate temp -o reports --clean")

6.4、allure报告的定制

来源地址:https://blog.csdn.net/qq_44895262/article/details/126559695

--结束END--

本文标题: python接口自动化测试(一)

本文链接: https://www.lsjlt.com/news/389343.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python接口自动化测试(一)
    一.既然我们有这些的接口测试工具,为什么要做接口做自动化 敏捷开发,接口一般数量很大,团队实现接口测试,版本控制。 2、功能太死板,有些接口完全无法实现(复杂的加密接口,签名接口等) 3、接口项目当中...
    99+
    2023-09-01
    python 开发语言
  • 〖Python接口自动化测试实战篇④〗- 接口自动化测试详解
    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我。推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订...
    99+
    2023-09-04
    自动化 python自动化测试实战 自动化测试 接口测试 接口自动化测试
  • Python接口自动化浅析登录接口测试实战
    目录1、什么是接口?那么,接口测试和功能测试的区别在哪呢?2、如何开展接口测试?3、如何设计接口用例?1.获取接口文档Fiddler2.分析接口文档的接口,提取测试点3.接口测试用例...
    99+
    2024-04-02
  • Postman自动化接口测试实战
    目录背景描述创建一个GET请求在pre-request scripts构建签名脚本写在环境变量中postman console的用法Collection Runner 自动化API测...
    99+
    2024-04-02
  • Python接口测试自动化的示例代码
    本篇内容主要讲解“Python接口测试自动化的示例代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python接口测试自动化的示例代码”吧!1、接口请求python 特别是 python 3....
    99+
    2023-06-16
  • Python-接口自动化(一)
      一、python语言特点 1、易于学习:python有相对较少的关键字,结构简单,有一个明确定义的语法,学起来比较简单;   2、易于阅读:python代码定义的更清晰;   3、易于维护:python的成功在于它的源代码是相当容易...
    99+
    2023-01-31
    接口 Python
  • 接口自动化测试用例详解
    phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式的接口是上传接口,需要对接口头部进行封装,所以没有办法在浏览器下直接调用,但是可以用Curl命令的-d参数传递接口需要的参数...
    99+
    2023-09-02
    自动化 测试用例 php 自动化测试 软件测试
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战
    Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Pyth...
    99+
    2023-02-23
    Python Requests PyTest Excel Allure 接口自动化
  • python使用pytest接口自动化测试的使用
    简单的设计思路 利用pytest对一个接口进行各种场景测试并且断言验证 配置文件独立开来(conf文件),实现不同环境下只需要改环境配置即可 测试的场景读...
    99+
    2024-04-02
  • Python+requests+unittest执行接口自动化测试详情
    目录1、安装requests、xlrd、json、unittest库2、创建六类Python Package3、创建一个Base_Page.py4、创建common类5、读取Exce...
    99+
    2024-04-02
  • Python自动化测试
    第一章 Python自带的UnitTest单元测试框架 一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架,框架是一个半成品,框架是对常用的功能,基础的代码进行封装的一个工具,这个工具对...
    99+
    2023-09-04
    python 单元测试 junit
  • python接口测试(一)
    基于Jenkins接口测试# coding = utf-8 import httplib http_client = None http_client = httplib.HTTPConnection('localhost' , 808...
    99+
    2023-01-31
    接口 测试 python
  • Postman中怎么进行接口测试和自动化测试
    在Postman中进行接口测试和自动化测试可以按照以下步骤进行: 创建一个新的Postman集合:在Postman中,创建一个新...
    99+
    2024-03-13
    Postman
  • Apifox:API 接口自动化测试完全指南
    1. 前言 在开始前大家可以先阅读:深入了解自动化测试:什么是自动化测试及其作用? 大家好,这是一篇关于 Apifox 的接口自动化测试教程。相信你已经对 Apifox 有所了解:“集 API 文档、API 调试、API Mock、API...
    99+
    2023-09-14
    java 前端 测试工具
  • Python接口自动化浅析unittest单元测试原理
    目录一、单元测试三连问1、什么是单元测试?2、为什么要做单元测试?3、怎么做单元测试?二、unittest模块说明1、unittest简介2、unittest组成1.TestCase...
    99+
    2024-04-02
  • 如何进行Postman自动化接口测试
    如何进行Postman自动化接口测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。背景描述有一个项目要使用postman进行接口测试,接口所需参数有:appid: 应用标识;s...
    99+
    2023-06-21
  • 使用postman进行接口自动化测试
    目录一、接口结果判断1、功能区2、脚本相关3、代码模板二、集合(批量)测试1、批量执行2、变化的参数数据1、使用变量2、Pre-request Script3、测试数据集3、定期任务...
    99+
    2024-04-02
  • 如何用Postman做接口自动化测试
    前言什么是自动化测试把人对软件的测试行为转化为由机器执行测试行为的一种实践。例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成的用例还必须随着被测试对象...
    99+
    2023-06-04
  • PHP接口自动化测试框架实现
    我们来看一个简单的PHP实现的超简单的接口。 ...//报名验证private function apply_verify() { $raid = $this->input->get_post('raid'); $mid = $...
    99+
    2023-09-21
    php android oracle 软件测试 程序人生
  • 【python+appium】自动化测试
    python+appium自动化测试系列就要告一段落了,本篇博客咱们做个小结。 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌...
    99+
    2023-08-31
    python appium 开发语言 postman jmeter
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作