Python+unittest+requests 接口自动化测试框架搭建 完整的框架搭建过程 实战
一、Python+unittest+requests+HTMLTestRunner 完整的接口自动化测试框架搭建_00——框架结构简解
首先配置好开发环境,下载安装Python并下载安装pycharm,在pycharm中创建项目功能目录。如果不会的可以百度Google一下,该内容网上的讲解还是比较多比较全的!
大家可以先简单了解下该项目的目录结构介绍,后面会针对每个文件有详细注解和代码。
common:
——configDb.py:这个文件主要编写数据库连接池的相关内容,本项目暂未考虑使用数据库来存储读取数据,此文件可忽略,或者不创建。本人是留着以后如果有相关操作时,方便使用。
——configEmail.py:这个文件主要是配置发送邮件的主题、正文等,将测试报告发送并抄送到相关人邮箱的逻辑。
——configHttp.py:这个文件主要来通过get、post、put、delete等方法来进行http请求,并拿到请求响应。
——HTMLTestRunner.py:主要是生成测试报告相关
——Log.py:调用该类的方法,用来打印生成日志
result:
——logs:生成的日志文件
——report.html:生成的测试报告
testCase:
——test01case.py:读取userCase.xlsx中的用例,使用unittest来进行断言校验
testFile/case:
——userCase.xlsx:对下面test_api.py接口服务里的接口,设计了三条简单的测试用例,如参数为null,参数不正确等
caselist.txt:配置将要执行testCase目录下的哪些用例文件,前加#代表不进行执行。当项目过于庞大,用例足够多的时候,我们可以通过这个开关,来确定本次执行哪些接口的哪些用例。
config.ini:数据库、邮箱、接口等的配置项,用于方便的调用读取。
getpathInfo.py:获取项目绝对路径
geturlParams.py:获取接口的URL、参数、method等
readConfig.py:读取配置文件的方法,并返回文件中内容
readExcel.py:读取Excel的方法
runAll.py:开始执行接口自动化,项目工程部署完毕后直接运行该文件即可
test_api.py:自己写的提供本地测试的接口服务
test_sql.py:测试数据库连接池的文件,本次项目未用到数据库,可以忽略
二、Python+unittest+requests+HTMLTestRunner完整的接口自动化测试框架搭建_01——测试接口服务
首先,我们想搭建一个接口自动化测试框架,前提我们必须要有一个可支持测试的接口服务。有人可能会说,现在我们的环境不管测试环境,还是生产环境有现成的接口。但是,一般工作环境中的接口,不太满足我们框架的各种条件。举例如,接口a可能是get接口b可能又是post,等等等等。因此我决定自己写一个简单的接口!用于我们这个框架的测试!
按第一讲的目录创建好文件,打开test_api.py,写入如下代码
import flask
import json
from flask import request '''
flask: web框架,通过flask提供的装饰器@server.route()将普通函数转换为服
'''
# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)
# @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
@server.route('/login', methods=['get', 'post'])
def login():
# 获取通过url请求传参的数据
username = request.values.get('name')
# 获取url请求传的密码,明文
pwd = request.values.get('pwd')
# 判断用户名、密码都不为空
if username and pwd:
if username == 'xiaoming' and pwd == '111':
resu = {'code': 200, 'message': '登录成功'}
return json.dumps(resu, ensure_ascii=False) # 将字典转换字符串
else:
resu = {'code': -1, 'message': '账号密码错误'}
return json.dumps(resu, ensure_ascii=False)
else:
resu = {'code': 10001, 'message': '参数不能为空!'}
return json.dumps(resu, ensure_ascii=False) if __name__ == '__main__':
server.run(debug=True, port=8888, host='127.0.0.1')
执行test_api.py,在浏览器中输入http://127.0.0.1:8888/login?name=xiaoming&pwd=11199回车,验证我们的接口服务是否正常~
变更我们的参数,查看不同的响应结果确认接口服务一切正常
三、Python+unittest+requests+HTMLTestRunner完整的接口自动化测试框架搭建_02——配置文件读取
在我们第二讲中,我们已经通过flask这个web框架创建好了我们用于测试的接口服务,因此我们可以把这个接口抽出来一些参数放到配置文件,然后通过一个读取配置文件的方法,方便后续的使用。同样还有邮件的相关配置~
按第一讲的目录创建好config.ini文件,打开该文件写入如下:
# -*- coding: utf-8 -*-
[HTTP]
scheme = http
baseurl = 127.0.0.1
port = 8888
timeout = 10.0 [EMAIL]
on_off = on;
subject = 接口自动化测试报告
app = Outlook
addressee = songxiaobao@qq.com
cc = zhaobenshan@qq.com
在HTTP中,协议http,baseURL,端口,超时时间。
在邮件中on_off是设置的一个开关,=on打开,发送邮件,=其他不发送邮件。subject邮件主题,addressee收件人,cc抄送人。
在我们编写readConfig.py文件前,我们先写一个获取项目某路径下某文件绝对路径的一个方法。按第一讲的目录结构创建好getpathInfo.py,打开该文件
import os def get_Path():
path = os.path.split(os.path.realpath(__file__))[0]
return path if __name__ == '__main__':# 执行该文件,测试下是否OK
print('测试路径是否OK,路径为:', get_Path())
填写如上代码并执行后,查看输出结果,打印出了该项目的绝对路径:
继续往下走,同理,按第一讲目录创建好readConfig.py文件,打开该文件,以后的章节不在累赘
import os
import configparser
import getpathInfo#引入我们自己的写的获取路径的类 path = getpathInfo.get_Path()#调用实例化,还记得这个类返回的路径为C:\Users\songlihui\PycharmProjects\dkxinterfaceTest
config_path = os.path.join(path, 'config.ini')#这句话是在path路径下再加一级,最后变成C:\Users\songlihui\PycharmProjects\dkxinterfaceTest\config.ini
config = configparser.ConfigParser()#调用外部的读取配置文件的方法
config.read(config_path, encoding='utf-8') class ReadConfig(): def get_http(self, name):
value = config.get('HTTP', name)
return value
def get_email(self, name):
value = config.get('EMAIL', name)
return value
def get_mysql(self, name):#写好,留以后备用。但是因为我们没有对数据库的操作,所以这个可以屏蔽掉
value = config.get('DATABASE', name)
return value if __name__ == '__main__':#测试一下,我们读取配置文件的方法是否可用
print('HTTP中的baseurl值为:', ReadConfig().get_http('baseurl'))
print('EMAIL中的开关on_off值为:', ReadConfig().get_email('on_off'))
执行下readConfig.py,查看数据是否正确
一切OK
四、Python+unittest+requests+HTMLTestRunner完整的接口自动化测试框架搭建_03——读取Excel中的case
配置文件写好了,接口我们也有了,然后我们来根据我们的接口设计我们简单的几条用例。首先在前两讲中我们写了一个我们测试的接口服务,针对这个接口服务存在三种情况的校验。正确的用户名和密码,账号密码错误和账号密码为空
我们根据上面的三种情况,将对这个接口的用例写在一个对应的单独文件中testFile\case\userCase.xlsx ,userCase.xlsx内容如下:
紧接着,我们有了用例设计的Excel了,我们要对这个Excel进行数据的读取操作,继续往下,我们创建readExcel.py文件
import os
import getpathInfo# 自己定义的内部类,该类返回项目的绝对路径
#调用读Excel的第三方库xlrd
from xlrd import open_workbook
# 拿到该项目所在的绝对路径
path = getpathInfo.get_Path() class readExcel():
def get_xls(self, xls_name, sheet_name):# xls_name填写用例的Excel名称 sheet_name该Excel的sheet名称
cls = []
# 获取用例文件路径
xlsPath = os.path.join(path, "testFile", 'case', xls_name)
file = open_workbook(xlsPath)# 打开用例Excel
sheet = file.sheet_by_name(sheet_name)#获得打开Excel的sheet
# 获取这个sheet内容行数
nrows = sheet.nrows
for i in range(nrows):#根据行数做循环
if sheet.row_values(i)[0] != u'case_name':#如果这个Excel的这个sheet的第i行的第一列不等于case_name那么我们把这行的数据添加到cls[]
cls.append(sheet.row_values(i))
return cls
if __name__ == '__main__':#我们执行该文件测试一下是否可以正确获取Excel中的值
print(readExcel().get_xls('userCase.xlsx', 'login'))
print(readExcel().get_xls('userCase.xlsx', 'login')[0][1])
print(readExcel().get_xls('userCase.xlsx', 'login')[1][2])
结果为:
完全正确~
五、Python+unittest+requests+HTMLTestRunner完整的接口自动化测试框架搭建_04——requests请求
配置文件有了,读取配置文件有了,用例有了,读取用例有了,我们的接口服务有了,我们是不是该写对某个接口进行http请求了,这时候我们需要使用pip install requests来安装第三方库,在common下configHttp.py,configHttp.py的内容如下:
import requests
import json class RunMain(): def send_post(self, url, data): # 定义一个方法,传入需要的参数url和data
# 参数必须按照url、data顺序传入
result = requests.post(url=url, data=data).json() # 因为这里要封装post方法,所以这里的url和data值不能写死
res = json.dumps(result, ensure_ascii=False, sort_keys=True, indent=2)
return res def send_get(self, url, data):
result = requests.get(url=url, params=data).json()
res = json.dumps(result, ensure_ascii=False, sort_keys=True, indent=2)
return res def run_main(self, method, url=None, data=None): # 定义一个run_main函数,通过传过来的method来进行不同的get或post请求
result = None
if method == 'post':
result = self.send_post(url, data)
elif method == 'get':
result = self.send_get(url, data)
else:
print("method值错误!!!")
return result if __name__ == '__main__': # 通过写死参数,来验证我们写的请求是否正确
result1 = RunMain().run_main('post', 'http://127.0.0.1:8888/login', {'name': 'xiaoming','pwd':'111'})
result2 = RunMain().run_main('get', 'http://127.0.0.1:8888/login', 'name=xiaoming&pwd=111')
print(result1)
print(result2)
执行该文件,验证结果正确性:
我们发现和浏览器中进行请求该接口,得到的结果一致,说明没有问题,一切OK
六、Python+unittest+requests+HTMLTestRunner完整的接口自动化测试框架搭建_05——参数动态化
在上一讲中,我们写了针对我们的接口服务,设计的三种测试用例,使用写死的参数(result = RunMain().run_main('post', 'http://127.0.0.1:8888/login', 'name=xiaoming&pwd='))来进行requests请求。本讲中我们写一个类,来用于分别获取这些参数,来第一讲的目录创建geturlParams.py,geturlParams.py文件中的内容如下:
import readConfig as readConfig readconfig = readConfig.ReadConfig() class geturlParams():# 定义一个方法,将从配置文件中读取的进行拼接
def get_Url(self):
new_url = readconfig.get_http('scheme') + '://' + readconfig.get_http('baseurl') + ':8888' + '/login' + '?'
#logger.info('new_url'+new_url)
return new_url if __name__ == '__main__':# 验证拼接后的正确性
print(geturlParams().get_Url())
通过将配置文件中的进行拼接,拼接后的结果:http://127.0.0.1:8888/login?和我们请求的一致
七、Python+unittest+requests+HTMLTestRunner完整的接口自动化测试框架搭建_06——unittest断言
未完成
Python+unittest+requests 接口自动化测试框架搭建 完整的框架搭建过程 实战的更多相关文章
- 【Python】【 接口自动化测试】【一】环境搭建
1. 环境配置 我电脑Windows7 64位 + Python2.7 + Oracle客户端 10.2 + cx_Oracle 10g Oracle客户端下载(为此我还申请个Oracle账号) ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架
整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...
- Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发接口化框架
整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLRe ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- python+requests接口自动化测试
转自https://my.oschina.net/u/3041656/blog/820023 原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测 ...
- 基于Python的HTTP接口自动化测试框架实现
今天我们来讲一下基于Python的HTTP接口自动化测试框架的实现,范例如下: 一.测试需求描述 对服务后台一系列的http接口功能测试. 输入:根据接口描述构造不同的参数输入值 输出:XML文件 e ...
- 【接口自动化】Python+Requests接口自动化测试框架搭建【一】
公司项目启用新框架,前后端分离,所以接口测试成为测试工作中不可缺失的一个环节,现在将从0开始搭建接口自动化测试框架的路程,一步步记录下来. 开发语言我们采用Python+第三方库Requests,测试 ...
- python+requests接口自动化测试框架实例详解教程
1.首先,我们先来理一下思路. 正常的接口测试流程是什么? 脑海里的反应是不是这样的: 确定测试接口的工具 —> 配置需要的接口参数 —> 进行测试 —> 检查测试结果(有的需要数据 ...
- 使用python+requests+unittest实现接口自动化测试
这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下. 一.整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用. Common:公共方法:主要放 ...
随机推荐
- 查询正在执行的SQL的数据库名和表名
创建限制0.5个CPU和0.5G内存的MySQL容器 docker run -itd --name mysql --cpu-quota=50000 --memory 512M --rm -p 3306 ...
- CAD中如何将图形对象转换为三维实体?
有些小伙伴在CAD绘制完图纸后,想要将图纸中的某些图形对象转换成三维实体,但却不知道该如何操作,其实很简单,本节CAD绘图教程就和小编一起来了解一下浩辰CAD软件中将符合条件的对象转换为三维实体的相关 ...
- vue IE9兼容flex布局 css3(转载)
原文 https://blog.csdn.net/shihezhengshz/article/details/118860562 写这文章的时候的我,心力憔悴鸭,找了好长时间,呜呜┭┮﹏┭┮ 好了,开 ...
- vvvvvvue
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="" ...
- chrome浏览器通知与语音播放
HTML5 Web Notification 语法 https://developer.mozilla.org/zh-CN/docs/Web/API/notification 如果浏览器支持Web N ...
- 2022-04-18内部群每日三题-清辉PMP
1.在为一个有预算限制的项目生成状态报告时,项目经理发现该项目比进度计划落后一周.若要将项目拉回正轨,项目经理应该怎么做? A.重新分配关键路径活动的团队成员. B.向项目发起人要求额外的时间. C. ...
- Vue CLI创建Vue2项目
1.安装Node.js * Node.js中包含了npm工具 安装后查看版本: node -v npm -v 2.设置npm的源为国内源 npm config set registry https:/ ...
- 将字符串数组String[]转换成List的三种方法
通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. String[] strArray = new String[2]; Li ...
- ubuntu22.04安装mysql5.7
22版本的ubuntu默认安装mysql8.0版本,要想安装5.x的版本就得下载安装,这个比较详细的教程,可以参考: https://www.cnblogs.com/juanxincai/p/1648 ...
- 061_Apex 异常捕捉
Trigger 中的错误处理 在 Trigger 中,我们可以为进行操作的数据进行验证,类似于验证规则.如果遇到不符合条件的数据,可以通过 addError() 函数来将错误显示给用户,并记录日志. ...