python代码对比数据
背景:每个迭代都会新增套餐的功能项,而且包括主办套餐、展商套餐、加油包,迭代测试中重复的工作量较多,非常适合自动化来自动对比
一、python代码实现思路:
1、每个迭代新增的功能项会整合到最新的excel中,稍作调整把最新的功能项列表放入表格第1列中---作为期望值
2、我们只需要把获取套餐接口返回的列表,读取出来写入到excel的第2列中----作为实际值
3、写一个方法用来获取第1列的值存入列表A,获取第2列的值存入列表B,遍历列表A是否在列表B中,把不在的存入diff列表C中
4、最后把预期列表A和实际列表B打印出来,并且判断当diff的列表为空即为测试通过,如果不为空打印出差异列表C
框架:pytest框架、excel操作类
二、pytest的test函数代码分享
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os,sys,pytest,os,random,requests,json,allure
from seleniumwire import webdriver
from time import sleep
from src.interface_get import Run_Main
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from util.operate_excel import OperateExcel
# dr = webdriver.Chrome()
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
host = 'https://jieroutest.digitalexpo.com/'
tenantId='10014032021013100016120583168790000000000328375'
zhanhui_id='1000149'
account=16616108888
prod_host='https://iwhale.digitalexpo.com/'
prod_tenantId='10014032021032000016161752045388335528290236709'
filepath = os.path.abspath("../data/case_packet_function_name.xls") # 表格关闭才可以
operate = OperateExcel(filepath, 0)
#主办登录成功 /api/v2/auth/sys/login
@pytest.fixture()
def login_01():
#获取组织列表
url = host + '/api/v2/auth/sys/login'
data = {"verifyCode":"888888","account":"16616102222",
"tenantId":tenantId,"loginType":"VERIFY_CODE"}
headers = {
'Content-Type': 'application/json'
}
req = Run_Main(url, data, headers, 'POST')
res = req.request_post_json(url, data, headers)
userId = res['resultInfo']['userId']
accessCode = res['resultInfo']['accessCode']
userOrganizeInfoList = res['resultInfo']['userOrganizeInfoList']
bizProfileId = res['resultInfo']['userOrganizeInfoList'][0]['bizProfileId']
rootUserId = res['resultInfo']['userOrganizeInfoList'][0]['userId']
# 获取token
url_login2 = host + '/api/v2/pc'
data_login2 = {
"userId": userId,
"accessCode": accessCode,
"tenantId": tenantId,
"rootUserId": rootUserId,
"bizProfileId": bizProfileId,
"userOrganizeInfoList":userOrganizeInfoList
}
req = Run_Main(url_login2, data_login2, headers, 'POST')
res = req.request_post_json(url_login2, data_login2, headers)
assert res['resultCode']=="SUCCESS"
global token
token=res['resultInfo']['authorization']
#获取套餐列表
def test_sku_list(login_01):
url = host+'api/v2/package/sku/function/code/my?'
rand_str=str(random.randint(1,10000))
data={"skuType":"SPONSOR"}
headers = {
'authorization':token,
'x-access-lang': 'zh-cn',
'x-ca-tenant-id': tenantId
}
req = Run_Main(url, data, headers, 'GET')
res = req.request_get(url, data, headers)
print(res)
print(len(res['resultInfo']['functionInfoList']))
assert res['resultCode']=='SUCCESS'
return res
def test_compare_list(login_01):
res=test_sku_list(login_01)
length=len(res['resultInfo']['functionInfoList'])
diffs = []
col_result = []
for i in range(length):
try:
col_result.append(res['resultInfo']['functionInfoList'][i]['functionName'])
except:
print("写入实际列表失败")
col_expect = operate.get_cols_data(0)
print("------预期功能列表项有%s个" % len(col_expect), "------预期功能项列表%s" % col_expect)
print("------实际功能列表项有%s个" % len(col_result), "------实际功能项列表为%s" % col_result)
for t in col_expect:
if t not in col_result:
diffs.append(t)#预期中有的,实际没有的打印出来
if diffs==[]:
print("实际和预期的套餐功能项一致,恭喜!")
else:
print("------实际和预期的套餐功能项一致,不一样的有%s" %diffs)
# 把不同的地方列表写入exlce某一列
for m in range(len(diffs)):
try:
operate.write_data(m, 3, diffs[m])
except:
print("写入文件失败")
# 把返回值列表写入exlce某一列中
for j in range(length):
try:
operate.write_data(j, 1, res['resultInfo']['functionInfoList'][j]['functionName'])
except:
print("写入文件失败")
三、excel操作代码分享
#coding=utf-8
import xlrd
import os
from xlutils.copy import copy
class OperateExcel(object):
def __init__(self, filepath,index):
self.filepath=filepath
self.index=index
self.data=self.get_data()
# def __init__(self, filepath=None,index=None):
# # if filepath:
# # self.filepath=filepath
# # self.index=index
# # else:
# # self.filepath="./data/case1.xls"
# # self.index=0
# self.data=self.get_data()
def get_data(self):
book=xlrd.open_workbook(self.filepath)
print(book.sheet_names())
sheet=book.sheet_by_index(self.index)
return sheet
def get_lines(self):
nrows=self.data.nrows
print(nrows)
return nrows
def get_cell_value(self,row,col):#先行后列,从0开始
value=self.data.cell(row,col).value
print(value)
return value
def write_data(self,row,col,value):
read_data=xlrd.open_workbook(self.filepath)
write_data=copy(read_data)
sheet=write_data.get_sheet(0)
sheet.write(row,col,value)
write_data.save(self.filepath)
#获取某一列的内容:
def get_cols_data(self,col_id=None):
if col_id!=None:
col_data=self.data.col_values(col_id)
else:
col_data=self.data.col_values(0)
return col_data
#根据对应caseid找到对应行的行号
def get_row_num(self,case_id):
num=0
col_datas=self.get_cols_data()
for col_data in col_datas:
if str(case_id) in col_data:
print(num)
return num
num=num+1
#根据行号,找到行的内容
def get_row_values(self,row):
sheet=self.data
row_data=sheet.row_values(row)
return row_data
#根据对应的caseid找到对应行的内容
def get_row_data(self,case_id):
row_num=self.get_row_num(case_id)
data=self.get_row_values(row_num)
print(data)
return data
#1204--excel获取接口数据,获取所有行的内容
def read_excel(self):
ll=[]
for i in range(1,self.get_lines()):
ll.append(self.get_row_values(i))
return ll
if __name__ == '__main__':
filepath=os.path.abspath("../data/case_test_yunzhan_web.xls")#表格关闭才可以
operate=OperateExcel(filepath,0)
operate.get_data()
operate.get_lines()
operate.get_cell_value(2,2)
operate.write_data(2,3,'no')
operate.get_cell_value(2,2)
operate.get_row_num('Imooc-05')
operate.get_row_data('Imooc-05')
python代码对比数据相关推荐
- python代码学习-数据处理图片加遮挡、噪声、模糊
python代码学习-数据处理图片加遮挡.噪声.模糊 (一)python代码学习-数据处理图片加遮挡 代码: from matplotlib import pyplot as plt from PIL ...
- 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. Py ...
- dataframe 输出标题_【学界】第八章:Python代码之数据输出、调参与算法总结
作者:小杨 学校:广东工业大学 年级:研二 专业:工业工程 主要研究兴趣:强化学习.深度学习 简介:作者是广东工业大学2016级工业工程系研究生,师从广东工业大学教授.博士生导师.<工业工程&g ...
- 50行Python代码绘制数据大屏,这个可视化框架真的太神了
今天小编来为大家安利另外一个用于绘制可视化图表的Python框架,名叫Dash,建立在Flask.Plotly.js以及React.js的基础之上,在创建之出的目的是为了帮助前端知识匮乏的数据分析人员 ...
- 50 行 Python 代码绘制数据大屏,这个可视化框架真的太神了
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编来为大家安利另外一个用于绘制可视化图表的Python框架,名叫Dash,建立在Flask.Plotly.js以及React.js的基础之上,在创 ...
- php和python对比-通过PHP与Python代码对比浅析语法差异
一.背景 人工智能这几年一直都比较火,笔者一直想去学习一番:因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着基础不牢,地动山摇的尴尬,比如在遇到稍微深入些的问题时候就容 ...
- python语法类似于php_通过PHP与Python代码对比浅析语法差异
一.背景 人工智能这几年一直都比较火,笔者一直想去学习一番:因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着基础不牢,地动山摇的尴尬,比如在遇到稍微深入些的问题时候就容 ...
- bp神经网络预测python代码_机器学习之多层神经网络(附Python代码和数据)
1 引言 多层神经网络,Multiple-layers Perceptron (MLP),又被称为多层感知机,是机器学习中深度学习的典型算法.关于多层神经网络的算法原理,我们在Stata和R实现的文章 ...
- python收集数据程序_用一行Python代码进行数据收集探索!Python真牛逼!
简易的Pandas之路 任何使用P ython数据的人都会熟悉Pandas包.P andas是大多数行和列格式数据的go-to包. 如果你没有Pandas,请确保在终端中使用pip install安装 ...
最新文章
- [转载]windows phone 墓碑化(9)
- c语言程序结果 856400,C语言程序设计答案(黄保和编)第3章.pdf
- C++---类成员变量定义为引用
- spring mvc+junit
- 数据集转换_“2000坐标”成了标配,你还不懂坐标系定义和转换吗?
- 双非硕士阿里大数据开发面经(已拿offer)
- 【复习笔记】Cache的映像方法
- 软件外包相关职业规划
- WaitForMultipleObjects、WaitForSingleObject、GetExitCodeThread
- S7-200SMART案例分析——运动控制之步进选型(一)
- SDLC - 螺旋模型
- 我的世界java版海岛种子_我的世界海岛生存种子,是出生在海岛不是找的那种。...
- Mock Server入门及实践
- php加壳,文件加壳实现(三) —— ZwUnmapViewOfSection
- 计算机高程知识点,测量学复习基本知识点(全).doc
- 《租车管理系统 ——“订单管理(代驾)”模块》项目研发阶段性总结
- 如何隐藏Android模拟器的虚拟按键
- 实体链接在小布助手和OGraph的实践应用
- 我的Linux安装之旅
- 如何简单使用纯CSS3模仿时钟的指针转动