接口自动化测试框架实例详解教程python+requests

合集下载

python---接口测试实例

python---接口测试实例

我们可以用Jmeter做接口测试,但是呢个人觉得那个有点局限性,用python就灵活很多,可以按自己的思路来构建比较灵活,下面给大家介绍一个简单的接口测试实例。

一、我们的思路如下:
首先我们要弄清楚我们的整个思路:
1.先把我们的测试数据准备好,即post的数据(当然get方法也可以发送请求数据)
2.然后我们向指定的URL发送请求(post方法)
3获取repones的结果数据,
4.判断repones结果是否有符合预期的数据
二、我这里举一个注册vpn账号的例子:
下面是我们要通过post方法请求的数据
Headers要先申明类型,然后通过requests.post方法向url发送数据请求。

三、请求数据后我们等待服务器响应,并且获取repones的数据
我们通过text方法获取到响应报文的内容,通过stauts_code获取响应的状态码
四、我们对获取到的报文做判断,是否含有预期的数据在里面
对code进行判断,是否为200,有则表示和服务器会话是正常的
对报文的内容进行判断,验证是否含有预期的数据
五、运行看结果
结果是ok的,可以注册成功
好,到这里我们一个简单的接口测试实例就讲完了。

接口自动化测试用例案例

接口自动化测试用例案例

接口自动化测试用例案例接口自动化测试用例是指通过编写脚本来自动执行接口测试的过程。

接口自动化测试用例的目的是验证接口的功能和性能是否符合预期,并提高测试效率和质量。

下面列举了一些接口自动化测试用例的案例,以帮助读者更好地理解接口自动化测试的实施过程。

1. 验证接口的返回状态码:通过发送请求,验证接口的返回状态码是否符合预期。

例如,当发送请求成功时,接口应返回200状态码;当请求的资源不存在时,接口应返回404状态码。

2. 验证接口的返回数据格式:通过发送请求,验证接口的返回数据格式是否符合预期。

例如,接口应返回JSON格式的数据,且数据中的字段和值符合预期。

3. 验证接口的返回数据准确性:通过发送请求,验证接口的返回数据是否准确。

例如,当请求获取用户信息的接口时,接口应返回该用户的正确信息。

4. 验证接口的错误处理能力:通过发送错误的请求,验证接口是否能正确处理错误,并返回相应的错误信息。

例如,当发送无效的请求参数时,接口应返回相应的错误提示信息。

5. 验证接口的并发性能:通过发送大量并发请求,验证接口的并发性能是否符合预期。

例如,接口应能够正确处理并发请求,并在合理的时间内返回响应。

6. 验证接口的安全性:通过发送恶意请求,验证接口的安全性是否得到保障。

例如,接口应对SQL注入、XSS攻击等安全漏洞进行有效防护。

7. 验证接口的稳定性:通过发送大量重复请求,验证接口的稳定性是否得到保障。

例如,接口应能够稳定地处理大量重复请求,并保持正常的响应时间。

8. 验证接口的性能指标:通过发送大量请求,统计接口的响应时间、吞吐量等性能指标,以评估接口的性能是否符合预期。

9. 验证接口的兼容性:通过发送不同版本或不同环境的请求,验证接口在不同环境下的兼容性。

例如,接口应能够正确处理不同版本的请求,并返回相应的兼容结果。

10. 验证接口的回归稳定性:通过发送各种类型的请求,验证接口在多次修改后的稳定性。

例如,接口应能够稳定地处理各种类型的请求,并返回正确的结果。

python单机版自动化测试框架源代码(selenium+Appium+requests+。。。

python单机版自动化测试框架源代码(selenium+Appium+requests+。。。

python单机版⾃动化测试框架源代码(selenium+Appium+requests+。

⼀、⾃动化测试框架:1、框架和项⽬源代码下载说明:框架可以⽀持web界⾯UI、安卓Android,ios苹果、接⼝API等⾃动化测试。

⽂档和代码持续维护更新,有问题可以交流。

2、依赖包安装2.1、jdk2.2、python安装下载地址:或2.3、python依赖包pip install seleniumpip install xlrdpip install pymysqlpip install lxmlpip install Pillowpip install win32guipip install win32conpip install requestspip install qrcodepip install pexpectpip install chinesecalendarpip install automagicapip install tusharepip install imapclientpip install pymysqlpip install schedulepip install paramikopip install pypiwin32pip install pdfminer3Kpip install browsermob-proxypip install pywin32pip install python-dateutilpip install bs4pip install configparserpip install beautifulsoup4pip install html5libpip install matplotlibpython -m pip install cx_Oracle --upgradepip install sqlparsepip install DBUtilspip install keyboard2.3、chrome driver2.3.1、chrome driver的下载地址:2.3.2、安装下载解压放到chrome的安装⽬录下...\Google\Chrome\Application\设置path环境变量,把chrome的安装⽬录(我的:C:\ProgramFiles\Google\Chrome\Application)1、因信息安全原因,删除了真实项⽬配置⽂件中密码和http⽹页真实地址2、以业务物流追踪(ipadWuLiuZhuiZong.py)中国港⼝功能为样例,做了界⾯检查、数据库与界⾯数据对⽐、字体颜⾊(红绿)检查等功能,仅供参考⼆、简介:1. 外部⼯具:上⾯⾃动化包⽬录“autoTest\basic\browsermob-proxy”中已经包含2. autoTest\conf\config.ini可以配置⽇志级别3. autoTest\caseexcel\ipadWebCase.xls是ipad⽹页项⽬Excel⽤例,“ipadApiCase.xls"是API接⼝⽤例,"⼤屏WebCase.xls"是⼤屏项⽬⽤例,"#url.xls"是⽣产和测试等⽹页地址配置⽂件4. autoTest\basic是基础脚本,基本所有项⽬通⽤,mySysCommon.py为系统常⽤函数功能class,webTestCase.py为UI⾃动化测试常⽤函数功能class5. autoTest\report是⽤于存放测试报告和过程图⽚6. autoTest\log是⽤于存放过程⽇志7. autoTest\cases\Zd为某项⽬⾃动化脚本,allData.json为公共数据变量⽂件,publicOperation.py为当前项⽬共⽤函数,comm.py中编写unittest的test开头⽤例,ipadDanJi.py和ipadWuLiuZhuiZong.py是各测试模块。

接口自动化测试用例案例

接口自动化测试用例案例

接口自动化测试用例案例全文共四篇示例,供读者参考第一篇示例:接口自动化测试是指通过自动化测试工具对接口进行测试的过程。

在现代软件开发中,接口自动化测试已经变得越来越重要,因为它可以帮助开发人员及时发现并解决接口问题,确保系统稳定性和可靠性。

接口自动化测试的用例设计是其中的重要环节,本文将介绍一些接口自动化测试用例案例,帮助读者更好地理解和应用接口自动化测试。

1. 测试接口的响应时间在接口自动化测试中,测试接口的响应时间是非常重要的一个指标。

如果接口响应时间过长,可能会影响用户体验,甚至导致系统故障。

我们可以设计一个用例来测试接口的响应时间,例如:发送一个请求到接口,并记录下请求发送时间和接口返回时间,计算二者之间的时间差,从而评估接口的响应时间是否在可接受范围内。

2. 测试接口的数据一致性另一个重要的接口自动化测试用例是测试接口的数据一致性。

在现代系统中,不同的模块之间经常需要相互交互数据,如果数据一致性出现问题,可能会导致系统功能异常。

我们可以设计一个用例来验证接口返回的数据是否与预期数据一致,例如:发送一个请求到接口,并比对返回数据与预期数据是否一致,从而检查接口的数据一致性。

3. 测试接口的安全性在接口自动化测试中,测试接口的安全性是至关重要的一环。

如今,网络攻击日益猖獗,系统的安全性问题已经成为软件开发中的一大难题。

我们可以设计一个用例来测试接口的安全性,例如:发送一个恶意请求到接口,验证系统是否能够正确地拦截和处理恶意请求,从而检查接口的安全性。

通过以上几个接口自动化测试用例案例的介绍,我希望能帮助读者更好地理解和应用接口自动化测试,提高软件开发质量和效率。

接口自动化测试是现代软件开发中不可或缺的一环,希木读者能够认真学习和应用接口自动化测试技术,共同推动软件开发行业的发展。

第二篇示例:接口自动化测试用例案例随着互联网技术的发展,越来越多的软件系统采用了分布式架构,不同的模块之间通过接口进行通信。

Python+Requests+PyTest+Excel+Allure接口自动化测试实战

Python+Requests+PyTest+Excel+Allure接口自动化测试实战

Python+Requests+PyTest+Excel+Allure接⼝⾃动化测试实战--------UnitTest框架和PyTest框架的简单认识对⽐与项⽬实战--------定义:Unittest是Python标准库中⾃带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语⾔的标准单元测试框架⼀样,Unittest则是Python语⾔的标准单元测试框架。

Pytest是Python的另⼀个第三⽅单元测试库。

它的⽬的是让单元测试变得更容易,并且也能扩展到⽀持应⽤层⾯复杂的功能测试。

两者对⽐:Pytest项⽬实战:第⼀步、搭建项⽬框架(创建Gwyc_Api_Script_Pytest项⽬⽬录)依次创建⼦⽬录如下:base:存放⼀些最底层的⽅法封装,协议,请求发送等。

common:存放⼀些公共⽅法。

config:存放配置⽂件。

data:存放测试数据。

log:存放⽇志。

report:存放报告。

tests:存放⽤例。

utils:存放公共类。

readme:⽤于说明⽂档。

requirements.txt: ⽤于记录所有依赖包极其版本号,便于环境部署,可以通过pip命令⾃动⽣成和安装。

第⼆步、封装请求⽅法(base⽬录下⾯创建method.py)封装有两种⽅法:第⼀种:直接调⽤requests库下⾯的request⽅法,并将所有需要⽤到的参数定义进去,分为实参和⾏参,实参调⽤必须要传参,⾏参可给默认值,调⽤时可重新赋值也可以使⽤默认值。

这种⽅法代码量少,不⽤做判断,request会⾃动根据传⼊的参数进⾏发送请求到服务器。

第⼆种:分别对各个请求⽅式按函数的形式封装,分别调⽤requests进⾏发送请求。

以get和post为例:put,delete请求按⼀样⽅法封装,各个请求⽅式封装完成以后再定义⼀个主⽅法,直接调⽤主⽅法会⾃动根据请求⽅式进⾏判断调⽤各个请求函数,这⾥也可以不对请求⽅式汇总封装,直接调⽤各个函数进⾏发送请求也是可以的。

requests模块介绍

requests模块介绍

requests模块介绍requests模块是使用Python写的HTTP请求库,它使得与HTTP请求和响应交互变得非常简单。

在使用requests模块时,可以使用方法来发送常见的HTTP请求,并能够处理HTTP响应。

本文将介绍requests模块的用途,使用方法和常见功能。

用途:requests模块是用于与HTTP交互的Python包,用来发送HTTP请求和处理HTTP响应。

requests库支持GET, POST, PUT, DELETE等HTTP方法。

此外,它也支持处理HTTP响应的内容,例如JSON和XML数据。

使用方法:安装requests:使用pip来安装requests模块:```pip install requests```基本形式:首先需要导入requests模块:```import requests```使用requests.get(url)来发送GET请求,获取响应:``````在这个请求中,r是响应的对象,包含请求的状态码,响应文本和其他信息。

状态码可以通过statusCode属性获取,响应文本可以通过te某t属性获取:```print(r.status_code)print(r.te某t)```发送POST请求:使用requests.post(url, data)来发送POST请求。

其中,data参数是字典类型的数据:```data = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=data)```发送PUT和DELETE请求:PUT和DELETE请求也可以使用requests模块来发送。

使用requests.put和requests.delete方法发送PUT和DELETE请求:r = requests.put(url, data=data)r = requests.delete(url)```常见功能:Cookies和Session:```s = requests.session。

Python—requests模块详解

Python—requests模块详解

Python—requests模块详解1、模块说明requests是使⽤Apache2 licensed 许可证的HTTP库。

⽤python编写。

⽐urllib2模块更简洁。

Request⽀持HTTP连接保持和连接池,⽀持使⽤cookie保持会话,⽀持⽂件上传,⽀持⾃动响应内容的编码,⽀持国际化的URL和POST数据⾃动编码。

在python内置模块的基础上进⾏了⾼度的封装,从⽽使得python进⾏⽹络请求时,变得⼈性化,使⽤Requests可以轻⽽易举的完成浏览器可有的任何操作。

现代,国际化,友好。

requests会⾃动实现持久连接keep-alive2、基础⼊门1)导⼊模块import requests2)发送请求的简洁 ⽰例代码:获取⼀个⽹页(个⼈github)import requestsr = requests.get('https:///Ranxf') # 最基本的不带参数的get请求r1 = requests.get(url='/s', params={'wd': 'python'}) # 带参数的get请求我们就可以使⽤该⽅式使⽤以下各种⽅法1 requests.get(‘https:///timeline.json’) # GET请求2 requests.post(“/post”) # POST请求3 requests.put(“/put”) # PUT请求4 requests.delete(“/delete”) # DELETE请求5 requests.head(“/get”) # HEAD请求6 requests.options(“/get” ) # OPTIONS请求3)为url传递参数>>> url_params = {'key':'value'} # 字典传递参数,如果值为None的键不会被添加到url中>>> r = requests.get('your url',params = url_params)>>> print(r.url) your url?key=value4)响应的内容r.encoding #获取当前的编码r.encoding = 'utf-8'#设置编码r.text #以encoding解析返回内容。

Python如何实现自动化测试

Python如何实现自动化测试

目录
CONTENTS
1
Python简述
2
Unittest / Pytest
3
Python + Requests
4
Python + Selenium
5
Python + Appium
6
辅助库简述
LOGO Python + Selenium
介绍
Selenium是用于Web应用程序测试的工具。Selenium测试直接运行在浏览 器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等
提供了SetUpClass()和TearDownClass()
C
setup_class/teardown_class只在类前后运行一次
用例运行前和结束后只运行一次

D
setup_method/teardown_method作用于方法始末
E
可以在函数前加@pytest.fixture()装饰器
LOGO Unittest / Pytest
68.111.97:90 14/api/safeR est/sysQrCod
post
json
"icon": "",
response.json()
"id": "",
["data"]["succe
"name": "public internet ssful"]==True
y
e/save
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

接口自动化测试框架实例详解教程python+requests前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的是java语言,但对于一个学java,却在学python的我来说,觉得python比起java更简单些,所以,我决定自己写python的接口自动化测试框架,由于本人也是刚学习python,这套自动化框架目前已经基本完成了,于是进行一些总结,便于以后回顾温习,有许多不完善的地方,也遇到了许多的问题,希望大神们多多指教。

下面我就进行今天的主要内容吧。

1、首先,我们先来理一下思路。

正常的接口测试流程是什么?脑海里的反应是不是这样的:确定测试接口的工具—> 配置需要的接口参数—> 进行测试—> 检查测试结果(有的需要数据库辅助)—> 生成测试报告(html报告)那么,我们就根据这样的过程来一步步搭建我们的框架。

在这个过程中,我们需要做到业务和数据的分离,这样才能灵活,达到我们写框架的目的。

只要好好做,一定可以成功。

这也是我当初对自己说的。

接下来,我们来进行结构的划分。

我的结构是这样的,大家可以参考下:common:存放一些共通的方法result:执行过程中生成的文件夹,里面存放每次测试的结果testCase:用于存放具体的测试casetestFile:存放测试过程中用到的文件,包括上传的文件,测试用例以及数据库的sql 语句caselist:txt文件,配置每次执行的case名称config:配置一些常量,例如数据库的相关信息,接口的相关信息等readConfig:用于读取config配置文件中的内容runAll:用于执行case既然整体结构有了划分,接下来就该一步步的填充整个框架了,首先,我们先来看看config.ini和readConfig.py两个文件,从他们入手,个人觉得比较容易走下去哒。

我们来看下文件的内容是什么样子的:[DATABASE]host = 50.23.190.57username = xxxxxxpassword = ******port = 3306database = databasename[HTTP]# 接口的urlbaseurl = http://xx.xxxx.xxport = 8080timeout = 1.0[EMAIL]mail_host = mail_user = xxx@mail_pass = *********mail_port = 25sender = xxx@receiver = xxxx@/xxxx@subject = pythoncontent = "All interface test has been complited\nplease read the report file about the detile of result in the attachment."testuser = Someoneon_off = 1相信大家都知道这样的配置文件,没错,所有一成不变的东西,我们都可以放到这里来。

哈哈,怎么样,不错吧。

现在,我们已经做好了固定的“仓库”。

来保存我们平时不动的东西,那么,我们要怎么把它拿出来为我所用呢?这时候,readConfig.py文件出世了,它成功的帮我们解决fd = open(configPath)data = fd.read()# remove BOMif data[:3] == codecs.BOM_UTF8:data = data[3:]file = codecs.open(configPath, "w")file.write(data)file.close()fd.close()self.cf = configparser.ConfigParser()self.cf.read(configPath)def get_email(self, name):value = self.cf.get("EMAIL", name)return valuedef get_http(self, name):value = self.cf.get("HTTP", name)return valuedef get_db(self, name):value = self.cf.get("DATABASE", name)return value怎么样,是不是看着很简单啊,我们定义的方法,根据名称取对应的值,是不是so easy?!当然了,这里我们只用到了get方法,还有其他的例如set方法,有兴趣的同学可以自己去探索下,这里我们就不在累述了。

话不多说,我们先来看下common到底有哪些东西。

既然配置文件和读取配置文件我们都已经完成了,也看到了common里的内容,接下来就可以写common里的共通方法了,从哪个下手呢?今天,我们就来翻“Log.py”的牌吧,因为它是比较独立的,我们单独跟他打交道,也为了以后它能为我们服务打下良好基础。

这里呢,我想跟大家多说两句,对于这个log文件呢,我给它单独启用了一个线程,这样在整个运行过程中,我们在写log的时候也会比较方便,看名字大家也知道了,这里就是我们对输出的日志的所有操作了,主要是对输出格式的规定,输出等级的定义以及其他一些输出的定义等等。

总之,你想对log做的任何事情,都可以放到这里来。

我们来看下代码,没有比这个更直接有效的了。

class Log:def __init__(self):global logPath, resultPath, proDirproDir = readConfig.proDirresultPath = os.path.join(proDir, "result")# create result file if it doesn't existif not os.path.exists(resultPath):os.mkdir(resultPath)# defined test result file name by localtimelogPath = os.path.join(resultPath, str(datetime.now().strftime("%Y%m%d%H%M%S")))# create test result file if it doesn't existif not os.path.exists(logPath):os.mkdir(logPath)# defined loggerself.logger = logging.getLogger()# defined log levelself.logger.setLevel()# defined handlerhandler = logging.FileHandler(os.path.join(logPath, "output.log"))# defined formatterformatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # defined formatterhandler.setFormatter(formatter)# add handlerself.logger.addHandler(handler),现在,我们创建了上面的Log类,在__init__初始化方法中,我们进行了log的相关初始化操作。

具体的操作内容,注释已经写得很清楚了(英文有点儿差,大家看得懂就行,嘿嘿……),这样,log的基本格式已经定义完成了,至于其他的方法,就靠大家自己发挥了,毕竟每个人的需求也不同,我们就只写普遍的共用方法啦。

接下来,就是把它放进一个线程内了,请看下面的代码:这也是我为什么选择它的原因,虽然小编我也是刚刚学习,还有很多不懂的地方。

好了,至此log的内容也结束了,是不是感觉自己棒棒哒~其实,无论什么时候,都不要感到害怕,要相信“世上无难事只怕有心人”。

下面,我们继续搭建,这次要做的,是configHttp.py的内容。

没错,我们开始配置接口文件啦!(终于写到接口了,是不是很开心啊~)下面是接口文件中主要部分的内容,让我们一起来看看吧。

import requestsimport readConfig as readConfigfrom common.Log import MyLog as LoglocalReadConfig = readConfig.ReadConfig()class ConfigHttp:def __init__(self):global host, port, timeouthost = localReadConfig.get_http("baseurl")port = localReadConfig.get_http("port")timeout = localReadConfig.get_http("timeout")self.log = Log.get_log()self.logger = self.log.get_logger()self.headers = {}self.params = {}self.data = {}self.url = Noneself.files = {}def set_url(self, url):self.url = host + urldef set_headers(self, header):self.headers = headerdef set_params(self, param):self.params = paramdef set_data(self, data):self.data = datadef set_files(self, file):self.files = file# defined http get methoddef get(self):try:response = requests.get(self.url, params=self.params, headers=self.headers,timeout=float(timeout))# response.raise_for_status()return responseexcept TimeoutError:self.logger.error("Time out!")return None# defined http post methoddef post(self):try:response = requests.post(self.url, headers=self.headers, data=self.data, files=self.files, timeout=float(timeout))# response.raise_for_status()return responseexcept TimeoutError:self.logger.error("Time out!")return None这里我们就挑重点来说吧。

相关文档
最新文档