http接口自动化测试框架实现

合集下载

接口自动化测试方案

接口自动化测试方案

接口自动化测试方案第1篇接口自动化测试方案一、前言随着信息化建设的不断深入,接口在各个系统间的数据交互中扮演着举足轻重的角色。

为确保接口稳定、可靠且高效地运行,降低系统上线后因接口问题导致的故障风险,提高软件质量,特制定本接口自动化测试方案。

二、目标1. 提高接口测试的效率,降低人工测试成本。

2. 实现对接口的全面覆盖,确保接口的稳定性和可靠性。

3. 建立可持续集成的自动化测试体系,为项目的快速迭代提供支持。

三、测试范围1. 系统内部接口:包括各模块间的数据交互接口。

2. 系统外部接口:包括与第三方系统或服务的接口。

3. 数据库接口:涉及数据库操作的接口。

四、测试工具及环境1. 测试工具:JMeter、Postman、Swagger等。

2. 测试环境:开发环境、测试环境、预生产环境、生产环境。

3. 数据库:MySQL、Oracle、SQL Server等。

五、测试策略1. 功能测试:验证接口的功能是否符合需求规格说明书。

2. 性能测试:评估接口在高并发、大数据量下的性能表现。

3. 安全测试:检查接口是否存在安全漏洞,如SQL注入、越权访问等。

4. 兼容性测试:验证接口在不同操作系统、浏览器、数据库等环境下的兼容性。

5. 异常测试:模拟各种异常场景,检查接口的容错性。

六、测试流程1. 需求分析:分析接口的业务需求,明确接口的功能、性能、安全等要求。

2. 测试设计:根据需求分析,编写接口测试用例。

3. 测试开发:搭建测试环境,编写自动化测试脚本。

4. 测试执行:在各个测试环境中执行自动化测试。

5. 结果分析:分析测试结果,定位问题原因,反馈给开发人员。

6. 跟踪验证:验证开发人员修复的问题,确保问题得到解决。

7. 测试报告:输出测试报告,包括测试覆盖率、通过率、问题列表等。

七、测试用例设计1. 根据接口文档,设计测试用例,包括正常场景、异常场景。

2. 测试用例应涵盖接口的功能、性能、安全等各个方面。

接口自动化测试框架搭建

接口自动化测试框架搭建

接⼝⾃动化测试框架搭建⼀、原理及特点 参数放在XML⽂件中进⾏管理 ⽤httpClient简单封装⼀个httpUtils⼯具类 ⽤例管理使⽤了testNg管理,使⽤了TestNG参数化测试,通过xml⽂件来执⾏case。

测试报告这⾥⽤到第三⽅的包ReportNG 项⽬组织⽤Maven⼆、准备 使⽤⼯具:eclipse,maven ⽤到的第三⽅jar包:dom4j、reportng、testng 理解难点:httpUtils和xmlUtil⼯具类的封装;dom4j使⽤;CookieStore的应⽤三、框架构思 1、项⽬结构 2、⽤例执⾏流程 3、接⼝调⽤流程 4、调度脚本流程四、框架实现 1、输⼊参数 1.1 参数放在XML⽂件中进⾏管理 例:这⾥测试获取⾓⾊的接⼝输⼊参数为,page和rows,mapRole.xml内容如下 <?xml version="1.0" encoding="UTF-8"?> <map> <bean beanName="GetRole"> <!--Locator lists --> <locator name="page" value="1"></locator> <locator name="rows" value="10"></locator> </bean> </map> 1.2 封装⼀个xmlUtil⼯具类负责读取XML,使⽤第三⽅的jar包dom4j 1.2.1 xmlUtil中readXMLDocument⽅法返回值为HashMap<String, String> public static HashMap<String, String> readXMLDocument(String beanName,String xmlName){ } 参数xmlName(xml⽂件的名字);参数beanName(xml⽂件中节点的名称); 1.3 封装⼀个CookieUtil⼯具类,通过CookieStore储存cookie 1.3.1 CookieUtil类中setCookieStore⽅法返回值为CookieStore public CookieStore setCookieStore(HttpResponse httpResponse) { } 1.4 ⽤httpClient简单封装⼀个httpUtils⼯具类有get.post,put,delete⽅法 1.4.1 httpUtils中post封装⽅法如下: public CloseableHttpResponse post(String url, Map<String, String> params,CloseableHttpClient httpclient,CookieStore cookieStore){ } 2、返回参数 2.1 创建⼀个接⼝返回对象ResponseBean, 对象ResponseBean,包括status、statusCode、contentType、body、url、method、cookies 2.2 在⼯具类中在创建⼀个ReponseUtil⼯具类 ReponseUtil⼯具类负责将请求的返回数据CloseableHttpResponse 转换成ResponseBean public ResponseBean setResponseBean(CloseableHttpResponse httpResponse) { } 3、测试⽤例 测试⽤例管理使⽤了testNg管理,使⽤了TestNG参数化测试,通过xml⽂件来执⾏case 3.1 测试case脚本public class GetRoleTest {static CookieStore cookieStore ;static CookieUtil cookieUtil=new CookieUtil() ;CloseableHttpClient client;HttpUtils httpUtils=HttpUtils.getInstance();@Parameters({ "url", "objBean" ,"statusCode","xmlName"})@BeforeSuite/** 登录进⼊系统获取JSESSIONID放⼊到CookieStore中* */public void TestLoginIn(String url ,String objBean, String statusCode,String xmlName) {Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName);client = HttpClients.createDefault();CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore);//cookieUtil.printResponse(httpResponse);cookieStore=cookieUtil.setCookieStore(httpResponse);}@Parameters({ "url", "objBean" ,"statusCode","body","xmlName"})@Test(priority = 2)public void TestGetRole(String url ,String objBean, String statusCode,String body,String xmlName) {Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName);client = HttpClients.custom().setDefaultCookieStore(cookieStore).build();CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore);ResponseBean rb=new ReponseUtil().setResponseBean(httpResponse);// add AssertAssert.assertEquals("OK", rb.getStatus());Assert.assertEquals(statusCode, rb.getStatusCode());Assert.assertEquals(true, rb.getBody().contains(body));}@AfterSuitepublic void closeClient(){try {// 关闭流并释放资源client.close();} catch (IOException e) {e.printStackTrace();}}} [注] 因为API接⼝测试时每次都要校验Cookie,所有我们每次都先执⾏登录操作去获取Cookie 3.2 xml⽂件的编写<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "/testng-1.0.dtd"><suite name="TestGetRole" parallel="classes" thread-count="5"><parameter name="url" value="/sys/login" /><parameter name="objBean" value="loginIn" /><parameter name="status" value="OK" /><parameter name="statusCode" value="200" /><parameter name="xmlName" value="mapRole" /><test name="TestGetRole" preserve-order="true"><parameter name="url" value="/json/getRoleInfo" /><parameter name="objBean" value="GetRole" /><parameter name="status" value="OK" /><parameter name="statusCode" value="200" /><parameter name="body" value="roleName" /><classes><class name="com.lc.testScript.GetRoleTest"><methods><include name="TestGetRole" /><!--<include name="TestGetRole2" />--></methods></class></classes></test></suite> 右键->run as ->TestNG Suite,这个场景的的测试⽤例就可以运⾏了 4、测试报告和项⽬组织 测试报告这⾥⽤到第三⽅的包ReportNG 项⽬组织⽤Maven<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>..............................................................................................................................<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><xmlFileName1>TestGetRole.xml</xmlFileName>.................这⾥写testNG对应的XML名称----------------------<xmlFileName10>TestGetUser.xml</xmlFileName></properties><dependencies>..........................</dependencies><build><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.19</version><configuration><suiteXmlFiles><suiteXmlFile>src/test/java/testSuites/${xmlFileName}</suiteXmlFile>.................略..........................这⾥的和properties中的xmlFileName想对应............<suiteXmlFile>src/test/java/testSuites/${xmlFileName10}</suiteXmlFile></suiteXmlFiles></configuration></plugin><!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.5</version><configuration><properties><property><name>usedefaultlisteners</name><value>false</value></property><property><name>listener</name><value>org.uncommons.reportng.HTMLReporter</value></property></properties><workingDirectory>target/</workingDirectory></configuration></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project> [注] 因为是maven的项⽬所以要将testSuite的xml⽂件放在maven的test⽬录下,这样右键pom.xml⽂件maven test,所有的测试⽤例就开始执⾏了 测试报告 框架⽬前存在的不⾜ 1、数据校验这⼀块的功能还没有完善,计划⽤MyBatis 2、参数使⽤了xml⽂件配置虽然灵活但有些繁琐,⽬前还没想到好的解决⽅案,testlink是否可以尝试⼀下呢。

前端开发知识:如何使用WebSocket和WebRTC来实现自动化测试

前端开发知识:如何使用WebSocket和WebRTC来实现自动化测试

前端开发知识:如何使用WebSocket和WebRTC来实现自动化测试自动化测试在前端开发领域中扮演着越来越重要的角色。

而在实现自动化测试过程中,WebSocket和WebRTC则是两种非常有用的工具。

本文将重点介绍这两种工具的应用。

WebSocket是HTML5引入的一种新协议,它基于TCP协议,在不断开HTTP请求的情况下,允许服务器向客户端主动发送数据。

这种实时的双向通信方式,非常适合在自动化测试过程中使用,因为开发者可以在测试过程中实时监测数据发送和接收的情况,并进行测试反馈。

在使用WebSocket来实现自动化测试的过程中,我们首先需要建立WebSocket连接。

这可以通过JavaScript中的WebSocket对象来实现,如下所示:```javascriptlet ws = new WebSocket('ws://localhost:8080');```这里的`localhost:8080`是服务器的地址和端口号,开发者需要根据实际情况进行调整。

一旦建立了WebSocket连接,我们可以通过`onopen`事件来发送用于测试的数据,如下所示:```javascriptws.onopen = () => {ws.send('Hello, world!');};```上述代码中,我们使用`send()`方法来向服务器发送消息。

服务器收到消息后,可以根据实际情况对消息进行解析和响应。

在接收到服务器响应后,开发者可以使用`onmessage`事件来处理响应数据,并进行测试结果的分析、反馈和记录,如下所示:```javascriptws.onmessage = (event) => {console.log(event.data);};```在使用WebSocket实现自动化测试的过程中,我们还需要注意另外一点:WebSocket的连接是可以断开的,因此需要在`onclose`事件处理函数中对连接进行处理,如下所示:```javascriptws.onclose = () => {console.log('WebSocket connection closed.');};```除了WebSocket,还有另一种非常适合在自动化测试中使用的工具,那就是WebRTC。

自动化测试框架的构建与实践案例分析

自动化测试框架的构建与实践案例分析

自动化测试框架的构建与实践案例分析在当今的软件开发领域,自动化测试已经成为确保软件质量和提高开发效率的关键手段。

而构建一个高效、稳定且可扩展的自动化测试框架则是实现自动化测试目标的重要基石。

本文将深入探讨自动化测试框架的构建方法,并结合实际案例进行详细分析,希望能为广大软件测试人员和开发团队提供有益的参考。

一、自动化测试框架的概述自动化测试框架是一组用于组织、管理和执行自动化测试用例的工具、技术和规范的集合。

它的主要目的是提高测试效率、降低测试成本、增强测试的可靠性和可维护性。

一个良好的自动化测试框架应该具备以下特点:1、可重用性:测试脚本和测试组件能够在不同的项目和测试场景中重复使用,减少重复开发的工作量。

2、可扩展性:能够方便地添加新的测试用例和测试功能,以适应不断变化的软件需求。

3、稳定性:在不同的环境和条件下,能够稳定地执行测试,确保测试结果的准确性。

4、可读性和可维护性:测试代码结构清晰、易于理解和维护,方便测试人员进行修改和优化。

二、自动化测试框架的构建要素1、测试工具选择选择适合项目需求的自动化测试工具是构建框架的第一步。

常见的自动化测试工具包括 Selenium、Appium、TestNG、JUnit 等。

例如,对于 Web 应用的自动化测试,Selenium 是一个广泛使用的工具;而对于移动应用的自动化测试,Appium 则更为合适。

2、测试框架设计框架的设计应遵循分层架构的原则,将测试代码分为不同的层次,如页面层、业务逻辑层、数据层等。

这样可以使测试代码更加清晰、易于维护,并且提高代码的复用性。

3、测试数据管理有效的测试数据管理是确保测试准确性和覆盖度的关键。

测试数据可以存储在数据库、Excel 文件或其他数据存储介质中,并通过数据驱动的测试方法来实现测试用例与测试数据的分离。

4、测试环境搭建搭建稳定的测试环境,包括硬件环境、操作系统、浏览器、移动设备等,以确保测试的一致性和可靠性。

软件测试中的自动化测试框架设计与实现

软件测试中的自动化测试框架设计与实现

软件测试中的自动化测试框架设计与实现随着软件开发过程的复杂化和软件产品的不断更新迭代,传统的手动测试已经无法满足测试需求的快速环节。

为了提高测试效率和质量,自动化测试成为软件测试领域的重要发展方向。

而自动化测试框架作为实现自动化测试的关键组成部分,在软件测试中扮演着重要的角色。

一、自动化测试框架的概念自动化测试框架是指一套结构化的、可重用的测试工具和组件,用于支持自动化测试的设计、实施和管理。

它提供了一系列的接口和功能,可以帮助测试人员快速、高效地完成测试任务。

自动化测试框架的设计和实现,应该充分考虑测试需求的多样性和软件测试工具的可扩展性,以满足不同领域、不同软件产品的测试需要。

二、自动化测试框架的设计原则1. 可扩展性:自动化测试框架应该具有良好的可扩展性,能够适应不同的测试场景和需求。

它应该能够支持不同的测试工具和组件的集成,如测试驱动开发工具、测试管理工具、应用程序接口(API)等。

2. 可重用性:自动化测试框架应该是可重用的,能够在不同的测试项目中进行复用。

通过将常用的测试模块和组件进行抽象和封装,可以提高测试的效率和质量,并减少测试案例的编写和维护成本。

3. 易用性:自动化测试框架应该是易用的,能够帮助测试人员快速上手。

它应该提供清晰的接口和文档,以及简单的配置和管理功能,使测试人员能够方便地进行测试脚本的编写、执行和结果分析。

4. 可靠性:自动化测试框架的设计和实现应该具有高可靠性,能够在不同的测试环境中稳定运行,并能够有效地捕获和处理测试中的异常情况。

此外,它还应该具备可恢复性,能够在发生错误时恢复到上一次的正确状态。

三、自动化测试框架的实现步骤1. 确定测试目标和需求:在设计自动化测试框架之前,首先需要明确测试的目标和需求。

根据不同的测试需求,确定测试的范围和测试用例的编写方式,以及所需的测试数据和环境。

2. 选择适合的测试工具:根据测试需求,选择适合的自动化测试工具。

常见的测试工具包括Selenium、Appium、JUnit等。

接口自动化测试用例案例

接口自动化测试用例案例

接口自动化测试用例案例接口自动化测试用例是指通过编写脚本来自动执行接口测试的过程。

接口自动化测试用例的目的是验证接口的功能和性能是否符合预期,并提高测试效率和质量。

下面列举了一些接口自动化测试用例的案例,以帮助读者更好地理解接口自动化测试的实施过程。

1. 验证接口的返回状态码:通过发送请求,验证接口的返回状态码是否符合预期。

例如,当发送请求成功时,接口应返回200状态码;当请求的资源不存在时,接口应返回404状态码。

2. 验证接口的返回数据格式:通过发送请求,验证接口的返回数据格式是否符合预期。

例如,接口应返回JSON格式的数据,且数据中的字段和值符合预期。

3. 验证接口的返回数据准确性:通过发送请求,验证接口的返回数据是否准确。

例如,当请求获取用户信息的接口时,接口应返回该用户的正确信息。

4. 验证接口的错误处理能力:通过发送错误的请求,验证接口是否能正确处理错误,并返回相应的错误信息。

例如,当发送无效的请求参数时,接口应返回相应的错误提示信息。

5. 验证接口的并发性能:通过发送大量并发请求,验证接口的并发性能是否符合预期。

例如,接口应能够正确处理并发请求,并在合理的时间内返回响应。

6. 验证接口的安全性:通过发送恶意请求,验证接口的安全性是否得到保障。

例如,接口应对SQL注入、XSS攻击等安全漏洞进行有效防护。

7. 验证接口的稳定性:通过发送大量重复请求,验证接口的稳定性是否得到保障。

例如,接口应能够稳定地处理大量重复请求,并保持正常的响应时间。

8. 验证接口的性能指标:通过发送大量请求,统计接口的响应时间、吞吐量等性能指标,以评估接口的性能是否符合预期。

9. 验证接口的兼容性:通过发送不同版本或不同环境的请求,验证接口在不同环境下的兼容性。

例如,接口应能够正确处理不同版本的请求,并返回相应的兼容结果。

10. 验证接口的回归稳定性:通过发送各种类型的请求,验证接口在多次修改后的稳定性。

例如,接口应能够稳定地处理各种类型的请求,并返回正确的结果。

接口自动化测试框架设计系列(一)

接口自动化测试框架设计系列(一)
接口测试报告:
测试从业两年多以来确实是如此大多数在功能测试之中好多东西得学但是课外学一要有时间二有时候又觉得有点纸上谈兵毕竟当下工作没用上觉得还真的挺难的
接口自动化测试框架设计系列(一)
先来一张接口自动化测试框架的架架结构解析: Config目录:存放配置文件,比如数据库的端口,地址,邮件配置信息等。 Data目录:存放公共部分数据,比如日志,token,excel,业务id等等。 Log目录:存放logging日志信息。 page目录:公共部分方法存放目录。 Reports目录:存放接口测试报告目录。 TestCases目录:存放接口测试案例目录。 Utlis目录:公共配置文件、方法目录。 runMain.py文件:主程序入文件口。

自动化测试平台的设计与实现

自动化测试平台的设计与实现

自动化测试平台的设计与实现引言概述:自动化测试平台是软件开发中必不可少的一环,它能够提高测试效率、减少人力成本,并且能够保证软件质量。

本文将介绍自动化测试平台的设计与实现,包括平台的架构设计、功能模块、测试用例管理、自动化测试执行和结果分析等五个部分。

一、平台的架构设计1.1 硬件设备:自动化测试平台需要选择合适的硬件设备来支持测试环境的搭建,如服务器、虚拟机、测试设备等。

1.2 软件工具:选择适合的软件工具用于平台的开发和测试,如测试管理工具、测试执行工具、测试报告生成工具等。

1.3 网络架构:设计合理的网络架构能够保证测试环境的稳定性和可靠性,包括网络拓扑、网络带宽、网络安全等。

二、功能模块2.1 用户管理:实现用户的注册、登录、权限管理等功能,确保不同用户有不同的操作权限。

2.2 项目管理:提供项目的创建、编辑、删除等功能,方便测试人员进行项目管理和测试用例的管理。

2.3 测试环境管理:实现测试环境的搭建、配置和管理,包括虚拟机的创建、网络的配置、测试设备的管理等。

三、测试用例管理3.1 用例编写:提供用例编写的界面,支持多种编程语言和测试框架,方便测试人员编写测试用例。

3.2 用例管理:实现用例的创建、编辑、删除等功能,支持用例的分类、标签等方式进行管理。

3.3 用例执行:提供用例执行的功能,支持批量执行、定时执行等方式,自动记录执行结果和日志。

四、自动化测试执行4.1 测试任务调度:实现测试任务的调度和分配,根据测试需求和资源情况进行任务的分配和执行。

4.2 测试执行监控:实时监控测试任务的执行情况,包括任务的进度、执行结果等信息。

4.3 异常处理:对于执行过程中出现的异常情况,能够及时处理和记录,方便后续的问题分析和修复。

五、结果分析5.1 测试报告生成:根据测试执行的结果生成测试报告,包括测试覆盖率、错误率、性能指标等信息。

5.2 数据分析:对测试结果进行数据分析,找出测试中的瓶颈和问题,并提供优化建议。

接口自动化测试文档

接口自动化测试文档

I.背景介绍1.简介功能测试、性能测试、GUI自动化回归测试已经能够满足我们的测试需求,保证网站质量,而随着产品功能越来越多、系统架构越来越复杂、新人越来越多,一些预想不到的缺陷出现在我们面前,我们必须要寻找一种更加有效的测试方法来适应当前的变化,保证产品的质量。

因此接口测试应运而生。

对于Web接口应用,包含浏览器与服务器交互的HTTP协议的接口和webService接口,软件测试人员在日常的测试工作中,需要大量的手动操作来验证接口的功能。

开发人员在开发过程中,需要访问其应用并且验证其功能是否正常运行,反复调试重复验证。

系统维护人员也需要经常访问其应用,以确保系统的正常运行。

如果某系统的接口较多,功能较为复杂,如上所述的这些操作就需要花费大量的时间和人力,如能引入自动化测试代替人工重复操作,将极大地提高团队的生产效率。

在这里,我们将介绍如何使用HttpClient框架完成接口自动化测试。

2.web接口自动化测试如今,大多数的应用软件是基于Web的应用程序并通过浏览器展示给用户并与之进行交互。

不同公司和机构组织都需要测试这些应用程序的有效性。

在一个高度交互性和响应的软件时代,许多组织及团队倾向于运用敏捷开发理论,自动化测试一定程度上成为了敏捷开发流程中不可或缺的手段。

所谓自动化测试,就是执行自动测试工具或者用某种程序设计语言编写程序,控制被测软件中的各种模块,模拟手动测试步骤,完成测试的过程。

测试自动化有很多优点,比如:频繁快速的迭代回归、高效的测试反馈、一致与重复性的执行、化繁为简的形式、弥补手工测试的可能遗漏缺陷等。

目前也有许多商业和开源的软件,可辅助面向Web接口自动化测试,如:HttpClient、HttpUnit、HtmlUnit、JwebUnit等。

HttpClient是一个功能丰富支持HTTP协议的客户端编程工具包,能够很好满足我们对接口的自动化测试。

II.协议请求1.HTTP协议HTTP协议即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

接口自动化测试各种框架的介绍与对比

接口自动化测试各种框架的介绍与对比

接⼝⾃动化测试各种框架的介绍与对⽐⼀、⼀张图表告诉你接⼝⾃动化框架有哪些,他们之间有何区别:另外,现阶段流⾏推荐使⽤:Python+unittest+requests+HTMLTestRunner框架⼆、Java Rest-assured框架:Java Rest-assured 是使⽤代码来实现接⼝的请求,封装业务流程,对于公司的业务⽀持⽐较⾼,灵活度很强,可以通过代码的⽅式打造⾃⼰公司的接⼝⾃动化框架,上⼿有点难度,需要有Java 编程基础,才可以使⽤。

三、python+ Request框架:python+ Request 是使⽤代码来实现接⼝的请求,封装业务流程,对于公司的业务⽀持⽐较⾼,可以根据业务的灵活度来定制化开发接⼝框架,再加上Jenkins 就可以持续化集成。

上⼿有点难度,需要有Python 编码的基础,才可以使⽤。

四、Robot Framework框架:官⽹介绍机器⼈框架是⼀个通⽤的开放源码⾃动化框架,⽤于验收测试、验收测试驱动开发(ATDD)和机器⼈过程⾃动化(RPA)。

它具有易于使⽤的表格测试数据语法,并利⽤关键字驱动的测试⽅法.它的测试功能可以通过⽤Python或Java实现的测试库来扩展,⽤户可以使⽤与创建测试⽤例相同的语法从现有的测试库中创建新的更⾼级别的关键字。

1、它的优点:(1)关键字驱动,⾃定义⽤户关键字。

(2)⽀持测试⽇志和报告⽣成。

(3)⽀持系统关键字开发,可扩展性好。

(4)⽀持数据库操作。

2、它的缺点:接⼝测试⽤例写起来不简洁。

需要掌握特定语法。

*** Settings ***Library RequestsLibraryLibrary Collections*** Test Cases ***test_get_event_list # 查询发布会(GET请求)${payload}= Create Dictionary eid=1Create Session event http://127.0.0.1:8000/api${r}= Get Request event /get_event_list/ params=${payload}Should Be Equal As Strings ${r.status_code} 200log ${r.json()}${dict} Set variable ${r.json()}#断⾔结果${msg} Get From Dictionary ${dict} messageShould Be Equal ${msg} success${sta} Get From Dictionary ${dict} status${status} Evaluate int(200)Should Be Equal ${sta} ${status}总结:不考虑,没⼈愿意这么写接⼝⽤例。

接口自动化测试用例案例

接口自动化测试用例案例

接口自动化测试用例案例
接口自动化测试用例是针对接口的自动化测试而设计的测试案例。

接口自动化测试主要是为了验证接口的功能是否正确、性能是
否达标以及是否符合预期的需求。

在设计接口自动化测试用例时,
需要考虑以下几个方面:
1. 输入数据验证,确保接口能够正确处理各种类型的输入数据,包括合法数据、非法数据、边界数据等。

测试用例需要覆盖各种可
能的输入情况,以验证接口的健壮性和安全性。

2. 接口功能验证,测试用例需要覆盖接口的各种功能点,包括
正常功能、异常处理、边界情况等。

通过设计不同的测试用例,可
以验证接口在各种情况下的行为是否符合预期。

3. 性能测试,除了功能验证外,接口自动化测试用例还需要包
括性能测试,验证接口在压力情况下的性能表现,包括响应时间、
并发处理能力等。

4. 接口集成测试,如果接口需要与其他系统或组件进行集成,
测试用例还需要包括对接口集成的验证,确保接口在不同环境下的
兼容性和稳定性。

5. 数据一致性验证,对于需要对数据进行读写操作的接口,测试用例还需要验证接口对数据的读写操作是否符合预期,包括数据的准确性、完整性、一致性等。

在设计接口自动化测试用例时,需要根据具体的接口功能和需求,综合考虑以上各个方面,设计全面、多样化的测试用例,以确保对接口的全面覆盖和有效验证。

同时,还需要考虑测试用例的可维护性和可重复性,以便在接口发生变化时能够及时更新和执行测试用例。

HttpRunner接口自动化测试框架

HttpRunner接口自动化测试框架

HttpRunner接⼝⾃动化测试框架简介2018年python开发者⼤会上,了解到HttpRuuner开源⾃动化测试框架,采⽤YAML/JSON格式管理⽤例,能录制和转换⽣成⽤例功能,充分做到⽤例与测试代码分离,相⽐excel维护测试场景数据更加简洁。

在此,利⽤业余时间研究这个框架去实现接⼝⾃动化测试。

HttpRunner 是⼀款⾯向 HTTP(S) 协议的通⽤开源测试框架,只需编写维护⼀份 YAML/JSON 脚本,即可实现⾃动化测试、性能测试、线上监控、持续集成等多种测试需求。

主流接⼝⾃动化⼯具框架:从上图可知,技术选型⼀般会优先考虑Requests+Python和HttpRunner,Requests+Python在⾃动化测试总结分类⾥⾯有⽂章讲过,这⾥我们针对HttpRunner进⾏探索。

框架流程主要特性:继承的全部特性,轻松实现 HTTP(S) 的各种测试需求采⽤ YAML/JSON 的形式描述测试场景,保障测试⽤例描述的统⼀性和可维护性借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑⽀持完善的测试⽤例分层机制,充分实现测试⽤例的复⽤测试前后⽀持完善的 hook 机制响应结果⽀持丰富的校验机制基于 HAR 实现接⼝录制和⽤例⽣成功能()结合框架,⽆需额外的⼯作即可实现分布式性能测试执⾏⽅式采⽤ CLI 调⽤,可与 Jenkins 等持续集成⼯具完美结合测试结果统计报告简洁清晰,附带详尽统计信息和⽇志记录极强的可扩展性,轻松实现⼆次开发和 Web 平台化环境安装:HttpRunner 是⼀个基于 Python 开发的测试框架,可以运⾏在 macOS、Linux、Windows 系统平台上。

HttpRunner ⽀持 Python 3.4 及以上的所有版本,推荐建议使⽤ Python 3.4 及以上版本。

使⽤pip命令安装:pip3 install httprunner 【因本⼈环境装有python两个版本,这⾥使⽤是python3.6版本,就使⽤pip3命令,如是python2.7版本的话,就⽤pip命令安装】安装完成后校验:如版本号正常显⽰,则说明安装正常。

HttpRunner接口自动化测试框架--3.用例编写

HttpRunner接口自动化测试框架--3.用例编写

HttpRunner接⼝⾃动化测试框架--3.⽤例编写HttpRunner 的测试⽤例⽀持两种⽂件格式:YAML 和 JSON。

JSON 和 YAML 格式的测试⽤例完全等价,包含的信息内容也完全相同。

在 HttpRunner 中,测试⽤例组织主要基于三个概念:测试⽤例集(testsuite):对应⼀个⽂件夹,包含单个或多个测试⽤例(YAML/JSON)⽂件测试⽤例(testcase):对应⼀个 YAML/JSON ⽂件,包含单个或多个测试步骤测试步骤(teststep):对应 YAML/JSON ⽂件中的⼀个 teststep,描述单次接⼝测试的全部内容,包括发起接⼝请求、解析响应结果、校验结果等。

本篇内容主要描述testcase 和 teststep 的编写格式和内容。

1.在⼀个测试⽤例⽂件中包含了两层变量空间作⽤域(本篇⽤yaml⽂件举例)config:作为整个测试⽤例的全局配置项,作⽤域为整个测试⽤例;test:测试步骤的变量空间,会继承或覆盖 config 中定义的内容;2.config中的参数详情config 参数详情参数是否必须格式详情name YES string测试⽤例的名称,在测试报告中将作为标题variables NO list of dict定义的全局变量,作⽤域为整个⽤例NO list of dict全局参数,⽤于实现数据化驱动,作⽤域为整个⽤例request NO dict request 的公共参数,作⽤域为整个⽤例;常⽤参数包括 base_url 和 headersrequest中参数详情参数 是否必须格式详情base_url NO String测试⽤例请求 URL 的公共 host,指定该参数后,test 中的 url 可以只描述 path 部分headers NO dict request 中 headers 的公共参数,作⽤域为整个⽤例output NO list整个⽤例输出的参数列表,可输出的参数包括公共的 variable 和 extract 的参数; 在 log-level 为debug 模式下,会在 terminal 中打印出参数内容debug 模式下,会在 terminal 中打印出参数内容3.测试步骤(teststeps)参数详情teststeps参数详情参数 是否必须格式详情name YES String测试步骤的名称,在测试报告中将作为测试步骤的名称request YES dict HTTP 请求的详细内容;可⽤参数详见官⽅⽂档variables NO list of dict测试步骤中定义的变量,作⽤域为当前测试步骤NO list从当前 HTTP 请求的响应结果中提取参数,并保存到参数变量中(例如token),后续测试⽤例可通过$token的形式进⾏引⽤NO list 测试⽤例中定义的结果校验项,作⽤域为当前测试⽤例,⽤于实现对当前测试⽤例运⾏结果的校验imes NO int重复执⾏测试⽤例的次数setup_hooks NO list在 HTTP 请求发送前执⾏ hook 函数,主要⽤于准备⼯作teardown_hooks NO list在 HTTP 请求发送后执⾏ hook 函数,主要⽤户测试后的清理⼯作。

HttpRunner接口自动化测试框架--1.环境搭建

HttpRunner接口自动化测试框架--1.环境搭建

HttpRunner接⼝⾃动化测试框架--1.环境搭建HttpRunner 是⼀款⾯向 HTTP(S) 协议的通⽤测试框架,只需编写维护⼀份 YAML/JSON 脚本,即可实现⾃动化测试、性能测试、线上监控、持续集成等多种测试需求。

HttpRunner 是⼀个基于 Python 开发的测试框架,可以运⾏在 macOS、Linux、Windows 系统平台上。

⽬前已发布版本:HttpRunner 2.x 版本,1.x 版本
1.搭建httprunner环境:通过pip ⽅式安装
1 pip install httprunner
2.检查环境在 HttpRunner 安装成功后,系统中会新增如下 5 个命令:
httprunner:核⼼命令
ate: 曾经⽤过的命令(当时框架名称为 ApiTestEngine),功能与 httprunner 完全相同
hrun: httprunner 的缩写,功能与 httprunner 完全相同
har2case: 辅助⼯具,可将标准通⽤的 HAR 格式(HTTP Archive)转换为YAML/JSON格式的测试⽤例
httprunner、hrun、ate 三个命令完全等价,功能特性完全相同,个⼈推荐使⽤hrun命令。

运⾏如下命令,若正常显⽰版本号,则说明 HttpRunner 安装成功。

1 hrun -V # 正常显⽰版本号即可。

接口自动化测试框架搭建

接口自动化测试框架搭建
您使用的浏览器不受支持建议使用新版浏览器
接口自动化测试框架搭建
1、创建一个工程 apiFrame 2、创建目录结构 3、base包封装 4、data,放数据文件,如csv文件、excel、yaml 5、config,请求地址不要放在接口测试模块中,单独出来处理进行自动判断 6、utils包,放工具的类,比如yaml文件 7、log日志的文件夹,放对应的日志 8、report放测试报告 9、所有的测试点放在tests包 10、Readme.md说明,给别人来看代码用 11、requirements.txt文件中写上测试过程中用到的库,到这个文件目录下执行命令pip install -r 这个文件,把要写的库的版本自动化的安装 如图

APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例

APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例
/** * 解析Json内容 * * @author Findyou * @version 1.0 2015/3/23 * @return JsonValue 返回JsonString中JsonId对应的Value **/ public static String getJsonValue(String JsonString, String JsonId) {
@Test(groups = { "BaseCase"}) public void getShangHai_Succ() throws IOException{
exp_city="上海"; cityCode="101020100"; Reporter.log("【正常用例】:获取"+exp_city+"天气成功!"); httpResult=weather.getHttpRespone(cityCode); Reporter.log("请求地址: "+weather.geturl()); Reporter.log("返回结果: "+httpResult); weatherinfo=Common.getJsonValue(httpResult, "weatherinfo"); city=Common.getJsonValue(weatherinfo, "city"); Reporter.log("用例结果: resultCode=>expected: " + exp_city + " ,actual: "+ city); Assert.assertEquals(city,exp_city); } }

基于Charles录制会话的HTTP接口自动化测试框架设计与实现

基于Charles录制会话的HTTP接口自动化测试框架设计与实现

基于Charles录制会话的HTTP接口自动化测试框架设计与实现刘国庆;汪兴轩【摘要】传统的HTTP接口测试步骤繁琐,工作量巨大,且现有的接口测试工具功能单一、可扩展性差.为了提高接口测试效率、弥补现有工具的不足,提出一种基于Charles录制会话的HTTP接口自动化测试框架.从客户端出发,录制HTTP会话过程,以此构建测试用例池;将测试用例通过特定的中间件服务嵌入至单元测试框架,持续集成平台持续调用测试框架并生成测试报告;框架集成报告发送功能,方便远程查看.通过实验验证,该框架可快速构建测试用例,持续测试接口,测试结果查看方便,测试效率提高.【期刊名称】《计算机应用与软件》【年(卷),期】2019(036)006【总页数】7页(P7-13)【关键词】Charles;接口;自动化测试;HTTP【作者】刘国庆;汪兴轩【作者单位】复旦大学信息科学与工程学院上海200433;复旦大学信息科学与工程学院上海200433【正文语种】中文【中图分类】TP30 引言接口测试是指Web系统组件间的测试,它主要用于检测组件与组件之间的交互点[1]。

在移动软件开发领域,大多采用分层软件体系结构,服务提供者和消费者基于接口契约传递数据和上下文信息。

应用软件的数据大多来源于服务端的接口返回,持续保障接口有效返回、及时发现异常接口是移动软件测试中的一个重要课题[2]。

在Web应用开发领域,客户端服务器模型是一种被广泛应用的网络架构,它把整套软件系统划分为客户端和服务端[3],即客户端请求数据,服务端响应内容。

超文本传输协议是一个基于请求与响应的无状态Web传输协议,因其具有传输效率高、占用较低的网络带宽等特点而被广泛使用[4]。

Charles是一款被广大Web开发者广泛使用的HTTP/HTTPS代理服务器、监视器、反向代理服务器软件,当Web应用程序通过Charles的代理访问互联网时,Charles可以监控HTTP/HTTPS应用程序发送和接收的所有数据。

接口测试自动化生成框架

接口测试自动化生成框架

接⼝测试⾃动化⽣成框架接⼝测试这个词语,相信⼤家都不陌⽣了吧。

⽬前我个⼈的理解,接⼝测试应该属于⽩盒测试的范畴,也是很多测试⼯程师很想从事和向往的⼀个测试⼿段。

⼤家都觉得⽩盒测试深不可测,但实际上是怎么样的呢。

接⼝测试的实施优先级对于Web应⽤来说,接⼝测试就是对某⼀个接⼝进⾏测试代码的编写和执⾏。

⼀般情况下,实施接⼝测试的优先级是:对暴露在外⾯的接⼝(该接⼝会给第三⽅调⽤)进⾏接⼝测试;内部的核⼼功能接⼝也会做接⼝测试;内部⾮核⼼功能接⼝的接⼝测试(很多时候就是单元测试)。

当然这个实施的具体细节,还需要根据项⽬的情景和⼈员的能⼒来确定如何实施接⼝测试、在哪⾥做接⼝测试、为什么要做接⼝测试、做到什么程度等。

相关⼚商内容相关赞助商全球架构师峰会,7⽉17⽇-18⽇,深圳⼤梅沙京基海湾⼤酒店。

接⼝测试的实施条件接下来说下,接⼝测试实施需要的⼀些条件。

第⼀个就是测试⼈员的能⼒,代码的熟悉能⼒、接⼝测试框架的使⽤能⼒、接⼝测试环境的搭建能⼒、接⼝测试设计的能⼒、基础代码的编写能⼒、基础Debug能⼒等。

第⼆个就是接⼝测试框架,框架是否定制化⼀些功能(⽐如⾃动加载java bean、⽅便初始化数据、⽅便校验数据库数据等)。

第三个就是测试团队和测试流程的⽀持,测试团队需要⽀持测试⼈员对核⼼接⼝进⾏接⼝测试(包括时间上、精⼒上、技术上等⽀持);测试流程上需要保证接⼝测试的效率和项⽬接⼊性(在项⽬当中实施接⼝测试,充分考虑开发团队和功能测试团队合作等)。

接⼝测试的实例接下来会通过⼀个案例来说明接⼝测试的⼀些基本考虑点,这⾥不涉及到详细的接⼝测试流程和注意点,只会把接⼝测试的⼀些想象展⽰给⼤家。

public interface IdleItemService {Result<ExtraItem> publish(ExtraItem extraItem);/*** taobao.idlesell.item.update* 编辑闲置宝贝*/Result<ExtraItem> update(ExtraItem extraItem);/*** taobao.idlesell.item.get* 查询闲置宝贝*/Result<ExtraItem> query(Long itemId,Boolean hasDesc,Boolean hasPic,String appKey);}上⾯的代码是淘宝的提供出去的某个Top接⼝代码,测试⼈员需要针对这个Top接⼝做最严格的接⼝测试,那他该怎么做呢,需要持续关注什么呢。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

http接口自动化测试框架实现作者:张元礼/vincetest一、测试需求描述对服务后台一系列的http接口功能测试。

输入:根据接口描述构造不同的参数输入值输出:XML文件eg:/xxx_product/test/content_book_list.jsp? listid=1二、实现方法1、选用Python脚本来驱动测试2、采用Excel表格管理测试数据,包括用例的管理、测试数据录入、测试结果显示等等,这个需要封装一个Excel的类即可。

3、调用http接口采用Python封装好的API即可4、测试需要的http组装字符转处理即可5、设置2个检查点,XML文件中的返回值字段(通过解析XML得到);XML文件的正确性(文件对比)6、首次执行测试采用半自动化的方式,即人工检查输出的XML文件是否正确,一旦正确将封存XML文件,为后续回归测试的预期结果,如果发现错误手工修正为预期文件。

(注意不是每次测试都人工检查该文件,只首次测试的时候才检查)三、Excel表格样式四、实现代码(代码才是王道,有注释很容易就能看明白的)1、测试框架代码[python]view plaincopy1.#****************************************************************2.# TestFrame.py3.# Author : Vince4.# Version : 1.1.25.# Date : 2011-3-146.# Description: 自动化测试平台7.#****************************************************************8.9.import os,sys, urllib, httplib, profile, datetime, time10.from xml2dict import XML2Dict11.import win32com.client12.from win32com.client import Dispatch13.import xml.etree.ElementTree as et14.#import MySQLdb15.16.#Excel表格中测试结果底色17.OK_COLOR=0xffffff18.NG_COLOR=0xff19.#NT_COLOR=0xffff20.NT_COLOR=0xC0C0C021.22.#Excel表格中测试结果汇总显示位置23.TESTTIME=[1, 14]24.TESTRESULT=[2, 14]25.26.#Excel模版设置27.#self.titleindex=3 #Excel中测试用例标题行索引28.#self.casebegin =4 #Excel中测试用例开始行索引29.#self.argbegin =3 #Excel中参数开始列索引30.#self.argcount =8 #Excel中支持的参数个数31.class create_excel:32.def __init__(self, sFile, dtitleindex=3, dcasebegin=4, dargbegin=3, dargcount=8):33. self.xlApp = win32com.client.Dispatch('et.Application') #MS:ExcelWPS:et34.try:35. self.book = self.xlApp.Workbooks.Open(sFile)36.except:37. print_error_info()38.print"打开文件失败"39. exit()40. self.file=sFile41. self.titleindex=dtitleindex42. self.casebegin=dcasebegin43. self.argbegin=dargbegin44. self.argcount=dargcount45. self.allresult=[]46.47. self.retCol=self.argbegin+self.argcount48. self.xmlCol=self.retCol+149. self.resultCol=self.xmlCol+150.51.def close(self):52.#self.book.Close(SaveChanges=0)53. self.book.Save()54. self.book.Close()55.#self.xlApp.Quit()56.del self.xlApp57.58.def read_data(self, iSheet, iRow, iCol):59.try:60. sht = self.book.Worksheets(iSheet)61. sValue=str(sht.Cells(iRow, iCol).Value)62.except:63. self.close()64.print('读取数据失败')65. exit()66.#去除'.0'67.if sValue[-2:]=='.0':68. sValue = sValue[0:-2]69.return sValue70.71.def write_data(self, iSheet, iRow, iCol, sData, color=OK_COLOR):72.try:73. sht = self.book.Worksheets(iSheet)74. sht.Cells(iRow, iCol).Value = sData.decode("utf-8")75. sht.Cells(iRow, iCol).Interior.Color=color76. self.book.Save()77.except:78. self.close()79.print('写入数据失败')80. exit()81.82.#获取用例个数83.def get_ncase(self, iSheet):84.try:85.return self.get_nrows(iSheet)-self.casebegin+186.except:87. self.close()88.print('获取Case个数失败')89. exit()90.91.def get_nrows(self, iSheet):92.try:93. sht = self.book.Worksheets(iSheet)94.return edRange.Rows.Count95.except:96. self.close()97.print('获取nrows失败')98. exit()99.100.def get_ncols(self, iSheet):101.try:102. sht = self.book.Worksheets(iSheet)103.return edRange.Columns.Count104.except:105. self.close()106.print('获取ncols失败')107. exit()108.109.def del_testrecord(self, suiteid):110.try:111.#为提升性能特别从For循环提取出来112. nrows=self.get_nrows(suiteid)+1113. ncols=self.get_ncols(suiteid)+1114. begincol=self.argbegin+self.argcount115.116.#提升性能117. sht = self.book.Worksheets(suiteid)118.119.for row in range(self.casebegin, nrows):120.for col in range(begincol, ncols):121. str=self.read_data(suiteid, row, col)122.#清除实际结果[]123. startpos = str.find('[')124.if startpos>0:125. str = str[0:startpos].strip()126. self.write_data(suiteid, row, col, str, OK_COLOR) 127.else:128.#提升性能129. sht.Cells(row, col).Interior.Color = OK_COLOR 130.#清除TestResul列中的测试结果,设置为NT131. self.write_data(suiteid, row, self.argbegin+self.argcount+ 1, ' ', OK_COLOR)132. self.write_data(suiteid, row, self.resultCol, 'NT', NT_COLO R)133.except:134. self.close()135.print('清除数据失败')136. exit()137.138.#执行调用139.def HTTPInvoke(IPPort, url):140. conn = httplib.HTTPConnection(IPPort)141. conn.request("GET", url)142. rsps = conn.getresponse()143. data = rsps.read()144. conn.close()145.return data146.147.#获取用例基本信息[Interface,argcount,[ArgNameList]]148.def get_caseinfo(Data, SuiteID):149. caseinfolist=[]150. sInterface=Data.read_data(SuiteID, 1, 2)151. argcount=int(Data.read_data(SuiteID, 2, 2))152.153.#获取参数名存入ArgNameList154. ArgNameList=[]155.for i in range(0, argcount):156. ArgNameList.append(Data.read_data(SuiteID, Data.titleindex, Data.ar gbegin+i))157.158. caseinfolist.append(sInterface)159. caseinfolist.append(argcount)160. caseinfolist.append(ArgNameList)161.return caseinfolist162.163.#获取输入164.def get_input(Data, SuiteID, CaseID, caseinfolist):165. sArge=''166.#参数组合167.for j in range(0, caseinfolist[1]):168.if Data.read_data(SuiteID, Data.casebegin+CaseID, Data.argbegin+j) != "None":169. sArge=sArge+caseinfolist[2][j]+'='+Data.read_data(SuiteID, Data .casebegin+CaseID, Data.argbegin+j)+'&'170.171.#去掉结尾的&字符172.if sArge[-1:]=='&':173. sArge = sArge[0:-1]174. sInput=caseinfolist[0]+sArge #组合全部参数175.return sInput176.177.#结果判断178.def assert_result(sReal, sExpect):179. sReal=str(sReal)180. sExpect=str(sExpect)181.if sReal==sExpect:182.return'OK'183.else:184.return'NG'185.186.#将测试结果写入文件187.def write_result(Data, SuiteId, CaseId, resultcol, *result):188.if len(result)>1:189. ret='OK'190.for i in range(0, len(result)):191.if result[i]=='NG':192. ret='NG'193.break194.if ret=='NG':195. Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,ret, NG_COLOR)196.else:197. Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,ret, OK_COLOR)198. Data.allresult.append(ret)199.else:200.if result[0]=='NG':201. Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,resul t[0], NG_COLOR)202.elif result[0]=='OK':203. Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,resul t[0], OK_COLOR)204.else: #NT205. Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,resul t[0], NT_COLOR)206. Data.allresult.append(result[0])207.208.#将当前结果立即打印209.print'case'+str(CaseId+1)+':', Data.allresult[-1]210.211.#打印测试结果212.def statisticresult(excelobj):213. allresultlist=excelobj.allresult214. count=[0, 0, 0]215.for i in range(0, len(allresultlist)):216.#print 'case'+str(i+1)+':', allresultlist[i]217. count=countflag(allresultlist[i],count[0], count[1], count[2]) 218.print'Statistic result as follow:'219.print'OK:', count[0]220.print'NG:', count[1]221.print'NT:', count[2]222.223.#解析XmlString返回Dict224.def get_xmlstring_dict(xml_string):225. xml = XML2Dict()226.return xml.fromstring(xml_string)227.228.#解析XmlFile返回Dict229.def get_xmlfile_dict(xml_file):230. xml = XML2Dict()231.return xml.parse(xml_file)232.233.#去除历史数据expect[real]234.def delcomment(excelobj, suiteid, iRow, iCol, str):235. startpos = str.find('[')236.if startpos>0:237. str = str[0:startpos].strip()238. excelobj.write_data(suiteid, iRow, iCol, str, OK_COLOR)239.return str240.241.#检查每个item (非结构体)242.def check_item(excelobj, suiteid, caseid,real_dict, checklist, begincol): 243. ret='OK'244.for checkid in range(0, len(checklist)):245. real=real_dict[checklist[checkid]]['value']246. expect=excelobj.read_data(suiteid, excelobj.casebegin+caseid, begin col+checkid)247.248.#如果检查不一致测将实际结果写入expect字段,格式:expect[real]249.#将return NG250. result=assert_result(real, expect)251.if result=='NG':252. writestr=expect+'['+real+']'253. excelobj.write_data(suiteid, excelobj.casebegin+caseid, beginco l+checkid, writestr, NG_COLOR)254. ret='NG'255.return ret256.257.#检查结构体类型258.def check_struct_item(excelobj, suiteid, caseid,real_struct_dict, structlis t, structbegin, structcount):259. ret='OK'260.if structcount>1: #传入的是List261.for structid in range(0, structcount):262. structdict=real_struct_dict[structid]263. temp=check_item(excelobj, suiteid, caseid,structdict, structlis t, structbegin+structid*len(structlist))264.if temp=='NG':265. ret='NG'266.267.else: #传入的是Dict268. temp=check_item(excelobj, suiteid, caseid,real_struct_dict, structl ist, structbegin)269.if temp=='NG':270. ret='NG'271.272.return ret273.274.#获取异常函数及行号275.def print_error_info():276."""Return the frame object for the caller's stack frame."""277.try:278.raise Exception279.except:280. f = sys.exc_info()[2].tb_frame.f_back281.print (f.f_code.co_name, f.f_lineno)282.283.#测试结果计数器,类似Switch语句实现284.def countflag(flag,ok, ng, nt):285. calculation = {'OK':lambda:[ok+1, ng, nt],286.'NG':lambda:[ok, ng+1, nt],287.'NT':lambda:[ok, ng, nt+1]}288.return calculation[flag]()2、项目测试代码[python]view plaincopy1.# -*- coding: utf-8 -*-2.#****************************************************************3.# xxx_server_case.py4.# Author : Vince5.# Version : 1.06.# Date : 2011-3-107.# Description: 内容服务系统测试代码8.#****************************************************************9.10.from testframe import *11.from common_lib import *12.13.httpString='/xxx_product/test/'14.expectXmldir=os.getcwd()+'/TestDir/expect/'15.realXmldir=os.getcwd()+'/TestDir/real/'16.17.def run(interface_name, suiteid):18.print'【'+interface_name+'】' + ' Test Begin,please waiting...'19.global expectXmldir, realXmldir20.21.#根据接口名分别创建预期结果目录和实际结果目录22. expectDir=expectXmldir+interface_name23. realDir=realXmldir+interface_name24.if os.path.exists(expectDir) == 0:25. os.makedirs(expectDir)26.if os.path.exists(realDir) == 0:27. os.makedirs(realDir)28.29. excelobj.del_testrecord(suiteid) #清除历史测试数据30. casecount=excelobj.get_ncase(suiteid) #获取case个数31. caseinfolist=get_caseinfo(excelobj, suiteid) #获取Case基本信息32.33.#遍历执行case34.for caseid in range(0, casecount):35.#检查是否执行该Case36.if excelobj.read_data(suiteid,excelobj.casebegin+caseid, 2)=='N':37. write_result(excelobj, suiteid, caseid, excelobj.resultCol, 'NT')38.continue#当前Case结束,继续执行下一个Case39.40.#获取测试数据41. sInput=httpString+get_input(excelobj, suiteid, caseid, caseinfolist)42. XmlString=HTTPInvoke(com_ipport, sInput) #执行调用43.44.#获取返回码并比较45. result_code=et.fromstring(XmlString).find("result_code").text46. ret1=check_result(excelobj, suiteid, caseid,result_code, excelobj.retCol)47.48.#保存预期结果文件49. expectPath=expectDir+'/'+str(caseid+1)+'.xml'50.#saveXmlfile(expectPath, XmlString)51.52.#保存实际结果文件53. realPath=realDir+'/'+str(caseid+1)+'.xml'54. saveXmlfile(realPath, XmlString)55.56.#比较预期结果和实际结果57. ret2= check_xmlfile(excelobj, suiteid, caseid,expectPath, realPath)58.59.#写测试结果60. write_result(excelobj, suiteid, caseid, excelobj.resultCol, ret1, ret2)61.print'【'+interface_name+'】' + ' Test End!'3、测试入口[python]view plaincopy1.# -*- coding: utf-8 -*-2.#****************************************************************3.# main.py4.# Author : Vince5.# Version : 1.06.# Date : 2011-3-167.# Description: 测试组装,用例执行入口8.#****************************************************************9.10.from testframe import *11.from xxx_server_case import *12.import xxx_server_case13.14.#产品系统接口测试15.#设置测试环境16.xxx_server_case.excelobj=create_excel(os.getcwd()+'/TestDir/xxx_Testcase.xls')17.xxx_server__ipport='18.19.#Add testsuite begin20.run("xxx_book_list", 4)21.#Add other suite from here22.#Add testsuite end23.24.statisticresult(xxx_server_case.excelobj)25.xxx_server_case.excelobj.close()最后感谢我的同事Roger为此做了一些优化,后续优化的东东还很多,我们一直在努力!欢迎转载此文,转载时请注明文章来源:张元礼的博客/vincetest。

相关文档
最新文档