这个是根据上次框架版本进行的优化

用python获取excel文件中测试用例数据

通过requets测试接口、并使用正则表达式验证响应信息内容

生成xml文件测试报告

版本更新内容:

1. 整理了CreateTest.test_main()流程逻辑

2. 优化了testcase.xls文件格式

3. 添加了生成XML文件测试报告

#!/usr/bin/env python
# -*- coding: utf_8 -*-
# 获取测试用例文件excel import xlrd
import json class CreateExcel:
def __init__(self):
pass @classmethod
def open_excel(cls):
path = "testcase.xls"
workbook = xlrd.open_workbook(path)
table = workbook.sheets()[0]
return table # 获取sheet @classmethod
def get_nrows(cls, table):
nrows = table.nrows
return nrows # 获取行号 @classmethod
def get_id(cls, table, nrows):
testid = []
for i in range(1, nrows):
testid.append(table.cell(i, 0).value)
return testid @classmethod
def get_name(cls, table, nrows):
testname = []
for i in range(1, nrows):
testname.append(table.cell(i, 1).value)
return testname # 获取用例name @classmethod
def get_data(cls, table, nrows):
testdata = []
for i in range(1, nrows):
try:
data = json.loads(table.cell(i, 2).value)
testdata.append(data)
except ValueError:
testdata.append(None)
return testdata # 获取data接口参数 @classmethod
def get_url(cls, table, nrows):
testurl = []
for i in range(1, nrows):
testurl.append(table.cell(i, 3).value)
return testurl # 获取接口测试url @classmethod
def get_method(cls, table, nrows):
testmethod = []
for i in range(1, nrows):
testmethod.append(table.cell(i, 4).value)
return testmethod # 获取接口测试method @classmethod
def get_pattern(cls, table, nrows):
testpattern = []
for i in range(1, nrows):
testpattern.append(table.cell(i, 5).value)
return testpattern # 获取接口期望响应结果
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# 测试核心组件 import requests
import re
from datetime import datetime
from createexcel import CreateExcel
from xml.dom import minidom
import sys class CreateTest:
reload(sys)
sys.setdefaultencoding("utf-8") # 避免字符串写入文件出错 def __init__(self):
pass @classmethod
def test_api(cls, method, url, data):
global results
try:
if method == "post":
results = requests.post(url, data)
if method == "get":
results = requests.get(url, data)
return results
except Exception.__bases__:
print "服务器访问失败" # 接口函数 @classmethod
def test_on(cls):
print "用例执行开始" @classmethod
def test_close(cls):
print "用例执行结束" @classmethod
def test_result(cls, pa):
global report
try:
pattern = re.compile(pa)
match = pattern.search(testresults.text)
if match.group() == pa:
report = "测试通过"
except AttributeError:
report = "测试失败"
return report # 正则表达式检测 @classmethod
def test_http(cls, code):
print "请求返回状态码: ", code @classmethod
def test_time(cls):
nowtime = datetime.today()
time = nowtime.strftime("%Y-%m-%d %H:%M:%S")
return time # 获取当前时间转化字符串 @classmethod
def test_report(cls):
nowtime = datetime.today()
reportime = nowtime.strftime("%Y%m%d%H%M%S")
reportname = reportime + ".xml"
return reportname # 获取测试报告文件名称 @classmethod
def test_main(cls):
global testresults
table = CreateExcel.open_excel()
nrows = CreateExcel.get_nrows(table)
xml = minidom.Document()
xml.appendChild(xml.createComment("测试报告"))
caselist = xml.createElement("caselist")
xml.appendChild(caselist)
for i in range(0, nrows - 1):
testid = CreateExcel.get_id(table, nrows)[i]
testname = CreateExcel.get_name(table, nrows)[i]
testdata = CreateExcel.get_data(table, nrows)[i]
testurl = CreateExcel.get_url(table, nrows)[i]
testmethod = CreateExcel.get_method(table, nrows)[i]
testpattern = CreateExcel.get_pattern(table, nrows)[i] # 执行测试
CreateTest.test_on()
testresults = CreateTest.test_api(testmethod, testurl, testdata)
testcode = str(testresults.status_code)
try:
CreateTest.test_http(testresults.status_code)
except AttributeError:
pass
CreateTest.test_close()
# 执行结束
# 生成xml文件
case = xml.createElement("case")
case.setAttribute("id", testid)
# 输入用例ID name = xml.createElement("name")
name.appendChild(xml.createTextNode(testname))
# 输入用例名称
method = xml.createElement("method")
method.appendChild(xml.createTextNode(testmethod))
# 输入接口类型
code = xml.createElement("code")
code.appendChild((xml.createTextNode(testcode)))
# 输入用例返回状态码
result = xml.createElement("result")
result.appendChild(xml.createTextNode(CreateTest.test_result(testpattern)))
# 输入用例测试结果
time = xml.createElement("time")
time.appendChild(xml.createTextNode(CreateTest.test_time()))
# 输入用例执行时间 case.appendChild(name)
case.appendChild(method)
case.appendChild(code)
case.appendChild(result)
case.appendChild(time) caselist.appendChild(case)
# xml文件生成结束
filename = file(CreateTest.test_report(), "w+")
# 生成以当前时间命名的测试报告文件
xml.writexml(filename)
filename.close()
# 关闭文件 if __name__ == '__main__':
CreateTest.test_main()

下面是测试入口:

#!/usr/bin/env python
# -*- coding: utf_8 -*-
# ****************************************************************
# interface.py
# Author : ChenLei
# Version : 2.0
# Date : 2016-4-15
# **************************************************************** import time
from createtest import CreateTest start = time.clock()
CreateTest.test_main()
end = time.clock() print "接口自动化脚本运行时间:%.03f seconds" % (end - start)

运行后自动生成 当前时间的xml文件 如下:

除非注明,本博客文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.cnblogs.com/cllovewxq/p/5394549.html

ython学习笔记(接口自动化框架 V2.0)的更多相关文章

  1. python学习笔记(接口自动化框架 V2.0)

    这个是根据上次框架版本进行的优化 用python获取excel文件中测试用例数据 通过requets测试接口.并使用正则表达式验证响应信息内容 生成xml文件测试报告 版本更新内容: 1. 整理了Cr ...

  2. 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]

    基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]   by:授客 QQ:1033553122 由于篇幅问题,,暂且采用网盘分享的形式: 下载地址: [授客] ...

  3. python学习笔记(接口自动化框架 V1.0)

    之前是利用python自带的unittest测试框架 这次自己设计一个 之后再一点点往里面加功能 (ps:当然这个框架真的是很简单..很简单...很简单...) excel文件格式: #!/usr/b ...

  4. 接口自动化 [授客]基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0

    基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  5. 转载:python + requests实现的接口自动化框架详细教程

    转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...

  6. python + requests实现的接口自动化框架详细教程

    前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...

  7. go语言,golang学习笔记2 web框架选择

    go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...

  8. 并发编程学习笔记(15)----Executor框架的使用

    Executor执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.通常使用 Executor 而不是显式地创建 ...

  9. mybatis学习笔记之基础框架(2)

    mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...

随机推荐

  1. 【Go语言学习笔记】Go的defer

    关键字 defer ⽤于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行. 注意,defer语句只能出现在函数或方法的内部. defer语句经常被用于处理成对的操作,如打开.关闭.连接.断开连接 ...

  2. 五(一)、spring 声明式事务注解配置

    一.事务概述: 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用:比如 用户购买图书:购买动作之前需要确认 ①图书的数量是否足够:②用户账号余额是否足够 ...

  3. pip 常用命令小结

    pip 常用命令小结 pip这个工具我们经常会用到,毕竟python 是一门以第三方库庞大而著名的编程语言,所以我们总会用pip 安装一些依赖库,当然这只是pip 最常用的一个命令,下面就来介绍一下 ...

  4. Part 61 to 63 Talking about partial class and partial method in C#

    部分类和部分方法 部分类是用partial声明的类,它允许我们把一个类分割成两个或多个类,当应用程序编译的完成的时候,多个部分类会结合成一个类,同时partial关键字也可以用于声明结构和接口. 那么 ...

  5. 环境(6)Linux文件系统二

    一:计算机间的数据传输 windows---linux : lrzsz  :需要手动安装 yum  install  lrzsz  -y   ;   rz  将文件从window上传到linux  : ...

  6. Java学习(九)

    今天先学习了内联框架的知识,使用iframe的标签,还有超链接的知识. 做了个小实践 <!DOCTYPE html> <head> <meta charset=" ...

  7. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  8. 微信小程序(十)

    时间机制- 响应用户交互 时间绑定 冒泡事件与非冒泡事件 bindtap 绑定 VS catchtap 绑定 button 不会阻止bindtap 向上冒泡,而如果是 catchtap 就会阻止向上冒 ...

  9. 关于linux系统密码策略的设置

    由于工作需要最近需要将公司的多台linux服务器进行密码策略的设置,主要内容是增加密码复杂度. 操作步骤如下,不会的同学可以参考: 操作前需要掌握如下几个简单的知识点:(其实不掌握也行,不过学学没坏处 ...

  10. [loj6031]字符串

    为了方便,用$N=10^{5}$来描述复杂度 (对原串建立SAM)注意到$\sum|w|=qk\le N$,考虑对$q$和$k$的大小关系分类讨论: 1.若$q\le k$,即询问次数较少,将其与原串 ...