python - 接口自动化测试实战 - case1 - 优化版
题目:
基于以下两个接口和数据完成接口自动化测试,并生成测试报告:
'''
登录 login='http://47.107.168.87:8080/futureloan/mvc/api/member/login'
login_data={'mobilephone':18688773467,'pwd':'123456'} 充值 recharge='http://47.107.168.87:8080/futureloan/mvc/api/member/recharge'
recharge_data={'mobilephone':18688773467,'amount':'1000'}
'''
test_excel.xlsx:
http_request.py
# -*- coding:utf-8 -*- '''
@project: jiaxy
@author: Jimmy
@file: http_request.py
@ide: PyCharm Community Edition
@time: 2018-12-05 10:06
@blog: https://www.cnblogs.com/gotesting/ ''' import requests class HttpRequest: def http_request(self,url,param,method,cookies=None):
if method == 'get':
res = requests.get(url,param,cookies = cookies)
elif method == 'post':
res = requests.post(url,param,cookies = cookies)
else:
print('请求方法错误!')
return res
read_excel.py
# -*- coding:utf-8 -*- '''
@project: jiaxy
@author: Jimmy
@file: read_excel.py
@ide: PyCharm Community Edition
@time: 2018-12-05 11:57
@blog: https://www.cnblogs.com/gotesting/ ''' from openpyxl import load_workbook class ReadExcel: def read_excel(self):
wb = load_workbook('test_excel.xlsx')
sheet = wb['登录及充值测试数据']
test_data = []
for i in range(2,sheet.max_row+1):
sub_data = {}
sub_data['url'] = sheet.cell(i,1).value
sub_data['param'] = eval(sheet.cell(i,2).value)
sub_data['method'] = sheet.cell(i,3).value
sub_data['expected'] = sheet.cell(i,4).value
test_data.append(sub_data)
return test_data
test_api.py
# -*- coding:utf-8 -*- '''
@project: jiaxy
@author: Jimmy
@file: TestApi.py
@ide: PyCharm Community Edition
@time: 2018-12-05 10:09
@blog: https://www.cnblogs.com/gotesting/ ''' import unittest from TestApi.http_request import HttpRequest cookies = None class TestHttpApi(unittest.TestCase): def setUp(self):
pass def tearDown(self):
pass # 改写__init__方法,使用超继承
def __init__(self,url,param,method,expected,methodName):
self.url = url
self.param = param
self.method = method
self.expected = expected
super(TestHttpApi,self).__init__(methodName) def test_api(self):
global cookies
res = HttpRequest().http_request(self.url,self.param,self.method,cookies)
print('请求结果:',res.json())
if res.cookies:
cookies = res.cookies try:
self.assertEquals(self.expected,res.json()['msg'])
except AssertionError as e:
print('断言异常:',e)
raise e
test_suite.py
# -*- coding:utf-8 -*- '''
@project: jiaxy
@author: Jimmy
@file: test_suite.py
@ide: PyCharm Community Edition
@time: 2018-12-05 10:28
@blog: https://www.cnblogs.com/gotesting/ ''' import unittest
import HTMLTestRunner
from TestApi.test_api import TestHttpApi
from TestApi.read_excel import ReadExcel # 定义测试数据列表
test_data = ReadExcel().read_excel()
print(test_data)
'''
test_data = [{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':'','pwd':'123456'},'method':'get','expected':'手机号不能为空'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':18688773467,'pwd':''},'method':'get','expected':'密码不能为空'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':18688773467,'pwd':'12345678'},'method':'get','expected':'用户名或密码错误'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':18688773467,'pwd':'123456'},'method':'get','expected':'登录成功'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':'','amount':'1000'},'method':'post','expected':'手机号不能为空'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':1868877346,'amount':'1000'},'method':'post','expected':'手机号码格式不正确'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':18688773467,'amount':''},'method':'post','expected':'请输入金额'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':18688773467,'amount':'100000000000'},'method':'post','expected':'请输入范围在0到50万之间的正数金额'},
{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':18688773467,'amount':'1000'},'method':'post','expected':'充值成功'}]
''' # 加载测试集
suite = unittest.TestSuite()
for item in test_data:
suite.addTest(TestHttpApi(item['url'],
item['param'],
item['method'],
item['expected'],
'test_api')) # 执行测试,输出测试报告
with open('TestApi.html','wb+') as file:
runner = HTMLTestRunner.HTMLTestRunner(file)
runner.run(suite)
测试报告:

python - 接口自动化测试实战 - case1 - 优化版的更多相关文章
- python - 接口自动化测试实战 - case1 - 再次优化版
本次优化: 1. 各级分Package 2. 封装[ReadExcel]类 3. 封装[ReadConfig]类 4. 封装[GetLog]类 5. 引入ddt数据驱动测试,优化测试用例代码 ...
- Python接口自动化测试实战-----附源码
目录 1. 接口定义 2. 基本流程 3. 需求分析 4. 用例设计 5. 脚本开发 6. 结果分析 接口定义: 接口普遍有两种意思,一种是API(Application Program Interf ...
- ptyhon - 接口自动化测试实战case1
work_20181203_httprequest.py: import requestsclass http_request: def http_get(url,params): res = req ...
- Python接口自动化测试框架实战 从设计到开发
第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- 《selenium2 Java 自动化测试实战(第二版)》 更新2016.5.3
java 版来了!! 本文档在<selenium2 Python 自动化测试实战>的基础上,将代码与实例替换为java ,当然,部分章节有变更.这主要更语言本身的特点有关.集合和java下 ...
- 面面俱到的Java接口自动化测试实战
第1章 接口自动化测试整体认知了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程. 1-1 导学章节 1-2 什么是接口 1-3 为什么要做接口测试 ...
随机推荐
- Flash图表控件FusionCharts如何高亮显示数据
使用Flash图表控件FusionCharts时,通过改变alpha值是高亮显示数据的最简单方式. XML代码如下: <chart> <set label='John' value= ...
- Ubuntu 修改host并重启网络
Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...
- Linux之bash shell的学习
1.什么是bash shell bash 是Bourne Again Shell的简称,是从unix系统中的sh发展而来,是用户和偶Linux内核交互的工具,用户通过bash操作内核完成系统的使用和 ...
- OCX和DLL的区别
转自:http://blog.csdn.net/scucj/archive/2006/06/29/852181.aspx OCX和DLL的区别 一.关于DLL的介绍 DLL,动态链接库,Dy ...
- NVM for Windows下载与安装
下载NVM for Windows https://github.com/coreybutler/nvm-windows/releases nvm-noinstall.zip: 这个是绿色免安装版本, ...
- ABAP和Java单例模式的攻防
ABAP CLASS zcl_jerry_singleton DEFINITION PUBLIC FINAL CREATE PRIVATE . PUBLIC SECTION. INTERFACES i ...
- PostgreSQL扫盲教程
在这个链接下载PostgreSQL. 安装时,请记住您给user postgres设置的初始密码,以及默认端口号5432,后面需要使用. 再安装图形化管理UI pgadmin,可以从这个链接获得. 安 ...
- 唱吧APP产品体验报告
- 用GWT开发的HelloGWT程序
GWT项目可以通过 命令行和Eclipse插件两种方法创建.创建GWT项目的命令是webAppCreator,具体使用方法可以看GWT的开发文档. Eclipse插件安装完成后,Eclipse的工具条 ...
- UVA 12171 (hdu 2771)sculptrue(离散化)
以前对离散化的理解不够,所以把端点和区间区分来考虑但是做完这题以后有了新的认识: 先来看一个问题:给你以下的网格,你需要多少空间去存储红点区间的信息呢? 只需要图上所示的1,2,3,4个点就足够表示红 ...
