用例读入数据库:

  1. #! /usr/bin/python
  2. # coding:utf-8
  3. import sys,os
  4. from Engine import DataEngine
  5.  
  6. reload(sys)
  7. sys.setdefaultencoding( "utf-8")
  8. from Engine.XlsEngine import XlsEngine_rd
  9. from Engine.SqlEngine import MSSQL
  10. dir=os.getcwd() #文件的绝对路径
  11. #用例文件,casedir=[[xls文件名列表],[xls文件路径列表]]
  12. casedir = DataEngine.getDateCase('.\DataSrc')
  13.  
  14. class ReadCase:
  15. def __init__(self,file):
  16. self.file=file
  17.  
  18. def readCase(self):
  19. data = XlsEngine_rd(self.file)
  20. data.xlrd_open()
  21. sheets=data.xlrd_object.sheets()
  22. result_list=[]
  23. for index in range(len(sheets)):#遍历excel文件的sheets
  24. sheet = data.xlrd_object.sheet_by_index(index)
  25. rows = sheet.nrows
  26. sheet_list=[]
  27. for i in range(rows):
  28. sheet_list.append(sheet.row_values(i))
  29. result_list.append(sheet_list) #单个sheet中的内容列表并入到结果列表中
  30. return result_list
  31.  
  32. class caseToDb():
  33. def __init__(self,host,user,psw,dbname):
  34. self.host=host
  35. self.user=user
  36. self.psw=psw
  37. self.dbname=dbname
  38. self.con = MSSQL(self.host,self.user,self.psw,self.dbname)
  39.  
  40. def InsertInterDefineSql(self,url,Descn,method,FlatType,ResultType):
  41. sql="INSERT INTO[dbo].[InterDefine]([Url],[Descn],[Method],[FlatType],[CreatDate],[EditDate],[VerSion],[IsRun],[ResultType])\
  42. VALUES('%s','%s','%s',%d,GETDATE(),GETDATE(),1,'Y','%s')"%(url,Descn,method,FlatType,ResultType)
  43. self.con.ExecNonQuery(sql)
  44.  
  45. def InsertDataCaseSql(self,InterfaceId,CaseId,AC,Data,IsRun,Expect):
  46. sql="INSERT INTO [dbo].[DataCase]([InterfaceId],[CaseId],[AC],[DataStr],[IsRun],[Expect],[CreatDate],[EditDate])\
  47. VALUES(%d,%d,'%s','%s','%s','%s',GETDATE(),GETDATE())"%(InterfaceId,CaseId,AC,Data,IsRun,Expect)
  48. self.con.ExecNonQuery(sql)
  49.  
  50. def methodId(self,method):
  51. sql="SELECT Id FROM dbo.InterDefine WHERE Method = '%s'"%method
  52. Id=self.con.ExecQuery(sql)
  53. return Id
  54. def dataCaseId(self,caseId,interfaceid):
  55. sql="SELECT Id FROM dbo.Datacase WHERE caseId = %d and interfaceid = %d"%(caseId,interfaceid)
  56. Id=self.con.ExecQuery(sql)
  57. return Id
  58.  
  59. def run():
  60. a=caseToDb('192.168.1.2','release','release','tester')
  61. try:
  62. for xlsindex in range(0,len(casedir[1])):
  63. result_list = ReadCase(casedir[1][xlsindex]).readCase() #依次获取用例文件地址
  64. for i in range(len(result_list)):#len(result_list)为文件中的sheet数量
  65. Descn = result_list[i][0][0]#获取单个sheet中的接口描述
  66. URL = result_list[i][2][0] #获取单个sheet中的接口地址
  67. METHOD = result_list[i][2][1]#获取单个sheet中的接口方法
  68. ArgAccount = int(result_list[i][2][2])#获取接口的参数个数
  69. ResultType = result_list[i][2][3]#获取接口的返回结果格式类型
  70. FlatType = result_list[i][2][4]#获取接口所属端
  71. if len(a.methodId(METHOD)) == 0:#如果接口定义表中无此方法,则插入接口定义参数
  72. a.InsertInterDefineSql(URL,Descn,METHOD,FlatType,ResultType)
  73. for j in range(5,len(result_list[i])):
  74. Data={}
  75. CaseId=int(result_list[i][j][0])#获取用例的id
  76. Run=str(result_list[i][j][1])
  77. Expect=str(result_list[i][j][2+ArgAccount])#获取预期结果
  78. InterfaceId = int(a.methodId(METHOD)[0][0])#查询用例对应的接口在接口定义表中的ID
  79. AC = result_list[i][j][3+ArgAccount]#单条接口用例的检查点描述
  80. if ArgAccount != 0:
  81. for value_index in range(2,2+ArgAccount):
  82. value = result_list[i][j][value_index]
  83. if isinstance(value,(float,int)):
  84. Data[result_list[i][4][value_index]]=int(value)#组成请求参数字典
  85. else:
  86. Data[result_list[i][4][value_index]]=str(value)#组成请求参数字典
  87. else:
  88. Data={}
  89. Data=str(Data).replace("'",'"')
  90. if len(a.dataCaseId(CaseId,InterfaceId)) == 0:#若用例表中无此用例ID和接口id,则插入
  91. a.InsertDataCaseSql(InterfaceId,CaseId,AC,Data,Run,Expect)
  92. except Exception,e:
  93. print(e)
  94.  
  95. # if __name__ == '__main__':
  96. # 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. SQL SERVER 运维日记-数据库备份

    概述 昨天下午突然看到,<炉石传说>游戏数据库发生宕机并引发数据丢失事故的新闻.刚看到时,满满的不可思议.暴雪啊,网易啊. 都是很牛叉的公司.他们出的游戏我都是很喜欢的. 当我看到,第一时 ...

  2. C++编程练习(17)----“二叉树非递归遍历的实现“

    二叉树的非递归遍历 最近看书上说道要掌握二叉树遍历的6种编写方式,之前只用递归方式编写过,这次就用非递归方式编写试一试. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历 ...

  3. (译)AngularJS1.3.0 开发者指南(四) -- 控制器

    理解Controllers 在AngularJS中, Controller是一个Javascript构造函数, 常常被用来扩展 Angular Scope 对象. 控制器通过 ng-controlle ...

  4. swift 可选类型笔记

    晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧.广州下雨,真特么的冷..好了,废话不说了,说正题说说Swift可选类型. 先定义一个变量: var string ...

  5. PLSQL程序流程

    IF语句结构: if(条件表达式)- -then- -执行语句;- -end; IF-THEN-ELSE语句结构: if(条件表达式)- -then- -执行语句;- -else- -执行语句;- e ...

  6. InnoDB和Foreign KEY Constraints

    InnoDB表中中Foreign Key定义 1. InnoDB允许a foreign key引用一个索引列或者索引组列. 2. InnoDB现在并不支持用户定义的分区表有foreign keys,这 ...

  7. 利用hexo+github+nodejs搭建自我博客的一天

    放一张比较喜欢的背景图镇楼,伪文艺一波.因为刚刚抱着四个快递从公司大门走到宿舍,快递都比我高,坐电梯的时候电梯里面的灯一闪一闪,电梯还摇晃,上演了一波鬼吹灯,惊魂未定... 说正题:我喜欢的博客应该是 ...

  8. jsp内置对象的方法

    JSP内置对象的方法:out:out.print();request:request对象主要用于出列客户端请求.   常用方法:    String getParameter(String name) ...

  9. Angular2 Service实践——实现简单音乐播放服务

    引言: 如果说组件系统(Component)是ng2应用的躯体,那把服务(Service)认为是流通于组件之间并为其带来生机的血液再合适不过了.组件间通信的其中一种优等选择就是使用服务,在ng1里就有 ...

  10. 不想当程序员的CEO不是好投资人:小米雷军23年前所写代码曝光

    众所周知,雷军是小米创办人,董事长兼CEO,但是较少人知道,其实雷军是程序员出身,并且在程序员这个行业里一做就是十年.有网友曝光了一段23年前雷军所写的代码,一起来看下. 可以看出这段代码写于1994 ...