用例读入数据库:

#! /usr/bin/python
# coding:utf-8
import sys,os
from Engine import DataEngine reload(sys)
sys.setdefaultencoding( "utf-8")
from Engine.XlsEngine import XlsEngine_rd
from Engine.SqlEngine import MSSQL
dir=os.getcwd() #文件的绝对路径
#用例文件,casedir=[[xls文件名列表],[xls文件路径列表]]
casedir = DataEngine.getDateCase('.\DataSrc') class ReadCase:
def __init__(self,file):
self.file=file def readCase(self):
data = XlsEngine_rd(self.file)
data.xlrd_open()
sheets=data.xlrd_object.sheets()
result_list=[]
for index in range(len(sheets)):#遍历excel文件的sheets
sheet = data.xlrd_object.sheet_by_index(index)
rows = sheet.nrows
sheet_list=[]
for i in range(rows):
sheet_list.append(sheet.row_values(i))
result_list.append(sheet_list) #单个sheet中的内容列表并入到结果列表中
return result_list class caseToDb():
def __init__(self,host,user,psw,dbname):
self.host=host
self.user=user
self.psw=psw
self.dbname=dbname
self.con = MSSQL(self.host,self.user,self.psw,self.dbname) def InsertInterDefineSql(self,url,Descn,method,FlatType,ResultType):
sql="INSERT INTO[dbo].[InterDefine]([Url],[Descn],[Method],[FlatType],[CreatDate],[EditDate],[VerSion],[IsRun],[ResultType])\
VALUES('%s','%s','%s',%d,GETDATE(),GETDATE(),1,'Y','%s')"%(url,Descn,method,FlatType,ResultType)
self.con.ExecNonQuery(sql) def InsertDataCaseSql(self,InterfaceId,CaseId,AC,Data,IsRun,Expect):
sql="INSERT INTO [dbo].[DataCase]([InterfaceId],[CaseId],[AC],[DataStr],[IsRun],[Expect],[CreatDate],[EditDate])\
VALUES(%d,%d,'%s','%s','%s','%s',GETDATE(),GETDATE())"%(InterfaceId,CaseId,AC,Data,IsRun,Expect)
self.con.ExecNonQuery(sql) def methodId(self,method):
sql="SELECT Id FROM dbo.InterDefine WHERE Method = '%s'"%method
Id=self.con.ExecQuery(sql)
return Id
def dataCaseId(self,caseId,interfaceid):
sql="SELECT Id FROM dbo.Datacase WHERE caseId = %d and interfaceid = %d"%(caseId,interfaceid)
Id=self.con.ExecQuery(sql)
return Id def run():
a=caseToDb('192.168.1.2','release','release','tester')
try:
for xlsindex in range(0,len(casedir[1])):
result_list = ReadCase(casedir[1][xlsindex]).readCase() #依次获取用例文件地址
for i in range(len(result_list)):#len(result_list)为文件中的sheet数量
Descn = result_list[i][0][0]#获取单个sheet中的接口描述
URL = result_list[i][2][0] #获取单个sheet中的接口地址
METHOD = result_list[i][2][1]#获取单个sheet中的接口方法
ArgAccount = int(result_list[i][2][2])#获取接口的参数个数
ResultType = result_list[i][2][3]#获取接口的返回结果格式类型
FlatType = result_list[i][2][4]#获取接口所属端
if len(a.methodId(METHOD)) == 0:#如果接口定义表中无此方法,则插入接口定义参数
a.InsertInterDefineSql(URL,Descn,METHOD,FlatType,ResultType)
for j in range(5,len(result_list[i])):
Data={}
CaseId=int(result_list[i][j][0])#获取用例的id
Run=str(result_list[i][j][1])
Expect=str(result_list[i][j][2+ArgAccount])#获取预期结果
InterfaceId = int(a.methodId(METHOD)[0][0])#查询用例对应的接口在接口定义表中的ID
AC = result_list[i][j][3+ArgAccount]#单条接口用例的检查点描述
if ArgAccount != 0:
for value_index in range(2,2+ArgAccount):
value = result_list[i][j][value_index]
if isinstance(value,(float,int)):
Data[result_list[i][4][value_index]]=int(value)#组成请求参数字典
else:
Data[result_list[i][4][value_index]]=str(value)#组成请求参数字典
else:
Data={}
Data=str(Data).replace("'",'"')
if len(a.dataCaseId(CaseId,InterfaceId)) == 0:#若用例表中无此用例ID和接口id,则插入
a.InsertDataCaseSql(InterfaceId,CaseId,AC,Data,Run,Expect)
except Exception,e:
print(e) # if __name__ == '__main__':
# run()

python 接口自动化测试--代码实现(八)的更多相关文章

  1. python 接口自动化测试--代码实现(七)

    数据库还原脚本: #! /usr/bin/python # coding:utf-8 import time from Engine.SqlEngine import MSSQL COUNT=1 de ...

  2. python接口自动化测试二十八:连接SQL sever操作

    1.中文乱码问题: (1).文件头加上# -*- coding:utf-8 -*- 或者 #coding=utf8 (2).pymssql.connect连接串中charset是要跟你数据库的编码一样 ...

  3. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

  4. 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 ...

  5. python接口自动化测试七:获取登录的Cookies

    python接口自动化测试七:获取登录的Cookies,并关联到下一个请求   获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...

  6. Python接口自动化测试框架实战 从设计到开发

    第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...

  7. python 接口自动化测试(三)

    1.WriteIni.py import ConfigParser cf = ConfigParser.ConfigParser() cf.add_section("PC_WSDL" ...

  8. 记录python接口自动化测试--简单总结一下学习过程(第十目)

    至此,从excel文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...

  9. python - 接口自动化测试实战 - case1 - 再次优化版

    本次优化: 1.  各级分Package 2.  封装[ReadExcel]类 3.  封装[ReadConfig]类 4.  封装[GetLog]类 5.  引入ddt数据驱动测试,优化测试用例代码 ...

随机推荐

  1. 马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别

    马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别 http://martinfowler.com/articles/injection.html 中文翻译:http://files ...

  2. 【The Most Important】浅谈JSP表单Post方式中文乱码问题

    首先祝大家鸡年吉祥!在这里我要说下这两天里这个问题困扰着我,大过年的心情都被烦扰的不好了,所以我带着兴奋的心情来赶快完成这篇博客,解决大家的问题.我的问题是post方式传递表单数据,Tomcat服务器 ...

  3. Android中微信抢红包助手的实现

    参考(感谢作者):http://www.jianshu.com/p/cd1cd53909d7 http://blog.csdn.net/jiangwei0910410003/article/detai ...

  4. ssh配置文件及问题解决

    一 ssh的配置文鉴模板 Host AAA User gitolite3 HostName IP地址 IdentityFile ~/.ssh/key 二 下载代码的方法 1 ssh git2 git ...

  5. 使用 visualstudio code 编辑器调试执行在 homestead 环境中的 laravel 程序

    由于之前做 .net 开发比较熟悉 visualstudio,所以自 visualstudio code 发布后就一直在不同场合使用 vscode ,比如前端.node等等.最近在做 laravel ...

  6. [CSS3]学习笔记-文字与字体相关样式

    1.给文字添加阴影 <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  7. 解析.NET对象的跨应用程序域访问--AppDomain(上篇)

    在目前的项目开发中,分布式开发已经逐渐成为主流.一个项目要是没有采用分布式架构,都不好意思跟别人说这是一个完整的项目.这句话虽然有些过激,但是随着人们对效率的要求在提高,以及产品需要提升用户体验.只有 ...

  8. vs2015 动态链接库问题

    问题: 最近要用vs2015编写一个动态链接库,生成动态链接库后,换到另一台windows下发现无法使用. 使用depends检查发现原因是缺少 MSVCP140.DLL等动态链接库. 解决: 将编译 ...

  9. Linux编程之从零开始搭建RPC分布式系统

    我一毕业进公司就接触到了RPC,主要是使用前辈们搭建好的RPC框架以及封装好的RPC函数进行业务开发,虽说使用RPC框架开发已经近半年了,但一直想知道如何从零开始搭建起这么一个好用的分布式通信系统框架 ...

  10. 构建自动化前端样式回归测试——BackstopJS篇

    在使用scss和less开发的时候,遇到过一件很有趣的事,因为网站需要支持响应式,就开了一个响应式样式框架,简单的几百行scss代码,居然生成了近100KB的css代码,因此决定重构这个样式库.而重构 ...