精华内容
下载资源
问答
  • 准则软件软件自动化测试框架设计参考准则测试框架是在所有不同的测试自动化阶段定义的一整套指导准则:需求分析阶段、脚本设计阶段、执行阶段、报告和维护阶段。框架即对于内部复杂架构的一种包装,这样的包装可以...
  • 基于Lua脚本的自动化测试框架设计 软件测试 一、自动化测试背景 1.被测对象为嵌入式系统中使用Lua脚本做胶合的一个个模块接口。需要编写Lua脚本调用这些接口对接口进行测试,运行环境为嵌入式系统中并非PC机。 2...
  • 白皮书软件测试中自动化测试框架设计参考准则简介测试框架是在所有不同的测试自动化阶段定义的一整套指导准则:需求分析阶段、脚本设计阶段、执行阶段、报告和维护阶段。框架即对于内部复杂架构的一种包装,这样的...
  • WEB自动化测试框架设计与应用,nh格式文档,软件测试学习
  • 主要从三个方面来讲解本自动化测试框架。第一是讲解本框架的设计思想,第二讲解框架核心 功能的实现,最后讲解框架的应用示例。关于本框架的名字,我们命名为AutoLancer
  • Selenium自动化测试框架设计指南,学习自动化测试框架的教程,详细讲解,很不错的教程。
  • 基于python的selenium UI自动化测试框架,采用Page Object设计模式进行二次开发,通过对页面对象和测试代码进行分离,并封装了日志输出,浏览器引擎选择,二次封装常用方法
  • Java接口自动化测试框架设计-1-开发环境的搭建

    万次阅读 多人点赞 2018-05-21 23:58:05
    废话不多说,刚开始,尽量详细,通过一步一步,手把手教会你搭建接口自动化测试的基础项目环境。 一.前提条件 我这里来一个约定,有以下前提条件。1.本机环境安装了maven并配置环境变量2.本机环境安装了Eclipse...

          本篇作为这个系列第一篇,主要介绍基础环境搭建过程。废话不多说,刚开始,尽量详细,通过一步一步,手把手教会你搭建接口自动化测试的基础项目环境。

     

    一.前提条件

     

    我这里来一个约定,有以下前提条件。

    1.本机环境安装了maven并配置环境变量

    2.本机环境安装了Eclipse软件

    3.本机环境安装了Java jdk 8版本

    4.本机需要能连接上互联网

     

           我这里还是选择了Eclipse,当然如果你有IntellijIDEA,当然也可以,我以下截图都是以Eclipse软件界面为准。如果没有接触过maven,不知道如何安装环境,请参考我这篇文章:https://blog.csdn.net/u011541946/article/details/78085989

     

    二.Eclipse上创建一个Maven工程

     

    在Eclipse中,点击File-new-project,选择Maven Project,如下图。


    点击多次Next按钮,直到出现下面界面。

     

           参考上面红圈位置,填写Group Id和Artifact Id,其中Artifact Id在Eclipse中反映出来就是项目名称,点击Finish按钮,Eclipse中新建的项目结构如下图。

     

           把main和test下包和相关class文件(自动生成的)删除,因为我们接下来不使用Junit,而是使用TestNG, 如果删除,后面我们编辑pom.xml的时候会报错。找到下面图红圈,删除这两个包。


    删除之后,test和main下都是空的文件结构。


    接下来,我们就编辑pom.xml,并添加一些我们需要的第三方插件lib的依赖和引用。

     

    三.添加必要的组件依赖

     

    在maven项目下,找到pom.xml文件,右键,打开方式选择记事本。


           我们先把junit的maven依赖给删除,然后这里,我们举例添加httpclient,因为我们需要做基于Java语言的接口自动化测试,httpclient和httpcore这两个是主要的组件。通过学习如何添加httpclient过程,其他的lib包就参考就能学会。

     

    1)打开浏览器,打开百度,搜索httpclient maven


    上面两个链接都可以,这里我选择第二个链接打开。

    2)点击第二个链接


    把上面红圈的文本内容复制到Eclipse项目中的pom.xml文件,添加之后如下效果。


    3)在Eclipse上的pom.xml,按下ctrl+s,保存之后,会发现依赖包自动下载到本地


    只要在pom.xml文件中输入正确的组件依赖文本内容,保存之后自动下载相关依赖包到本地(红圈位置)

    4)依次添加其他组件

    从上面httpclient组件添加过程,我们学会了一个基于mava依赖的组件添加到本地工程的过程,下面我们需要添加httpcore, testing, fastjson


         Httpcore主要是网络相关的组件,我们使用Http请求就需要网络相关底层方法。Testng主要是取代junit,是一个单元测试框架,方便我们编写接口自动化用例。Fastjson是阿里巴巴的一个json的开源的组件,据说是最快的json的组件,主要用来json序列化和反序列操作。

         到这里,我们就把基础的开发环境给搭建好了,接下来我们写一个Get请求的过程。

     

    展开全文
  • 通用UI自动化测试框架设计(web端)

    万次阅读 2019-03-10 12:27:53
    写过UI自动化测试脚本的朋友...然后针对这个,设计了现在的UI自动化测试框架,实现了简单的通用,每次只需要维护好用例就行了,维护成本降低。 大家都知道,基于selenium函数,对页面元素的操作,很多都是点击、输...

    写过UI自动化测试脚本的朋友,相信都会遇到过,比如前端页面元素改了,又需要去改自己写的脚本,而且只能针对某个web页面的定制化设计,换个web项目就不灵了。

    我就在考虑,为什么UI自动化框架就不能通用在不同的系统呢?然后针对这个,设计了现在的UI自动化测试框架,实现了简单的通用,每次只需要维护好用例就行了,维护成本降低。

    大家都知道,基于selenium函数,对页面元素的操作,很多都是点击、输入参数、处理iframe、处理alert、下拉框动作这几类,然后语法基本是固定的。那是不是可以针对这个情况,对操作类型进行一个封装,不管你要做什么操作,经过判断调用对应的方法就好了。

    相信说到这里,大家也有自己的思路了。废话不多说,直接上主程序的流程图。

    主流程图如上。

    然后开始选择函数。

    首先,我们需要想好,用例以什么形式存储,读取用例用什么函数,我这里采用excel形式存储用例,使用pandas操作用例。

    然后想好支持什么浏览器,浏览器基本就是火狐,谷歌,IE,苹果浏览器。这里选择火狐,50+版本以上。想支持多个浏览器,可以多封装几个函数。

    再次确定使用什么语言,那个版本的selenium,这里选用python3.6,selenium3。用例参数选用map形式的字典。

    最后设计好用例,必须包含基本要素。

    用例设计如下图:

    框架概览:

    基本介绍就到这,欢迎到资源中心下载源码,附带使用说明哦。

    顺便推广下一个测试公益社群,欢迎进群交流,在深圳站分群等你哦。

    VIPTEST社群简介:

    1. VIPTEST社群(简称V社)是由一群热心的测试行业志愿者自发组织形成的开放性测试同业联盟。社群网站:www.viptest.net

    2. 社群通过线上数百个有组织有规划的微信,QQ群,以及基于问答和分享的互动网站,打通人脉和技术交流壁垒,把不同层次的测试从业者,企业,平台连接在一起,进行充分的技术交流和技术互助,打破信息屏障。同时,社群又发展了V-Share(线上V咖分享会),V-Salon(线下沙龙),V-Chat(线下闭门论坛)等公益活动品牌,将这种连接进一步变成融合,推动测试行业发展。

    3. VIPTEST社群以公益、共享、互助、生态为发展理念,不拘泥于传统,通过多层次的组织,以更丰富、更有新意、更多元化的互动形式将整个测试行业紧密连接在一起。

    4. 目前社群成员20000+,遍布全国7个大区,25个城市,覆盖5000+企业测试团队,并设有东南亚和北美分社,已经初具规模。社群成员组成有72%来自于互联网企业,有19%来自于传统企业,9%来自于其他企业,院校或组织。

    5. 社群愿景:我们致力于打造中国规模最大,覆盖面最广的纯公益测试社群。

    VIPTEST互联网测试开发社群公约:

    1. 进群后为方便认识交流,请第一时间修改群昵称,格式:公司-姓名-岗位。交流互动从修改群昵称开始,我们会定期清理不修改群昵称人员。

    2. 入群要求:①全国地区️测试行业的功能测试、性能测试、自动化测试、测试开发、安全测试、测试顾问、质量管理、测试总监等人员,欢迎邀请符合条件人员加入。

    3. ️进群后没有与别人沟通熟悉之前,不要随意乱加别人微信,我们有严格的监控体系,一旦发生立即会在所有群清除此类人,且不得再加入社群。

    4. 公益社群靠大家自觉维护群秩序,群内不准乱发广告,我们会定期清理不合规成员,谢谢大家支持与配合。

    5. 定期关注社群网站最新活动通知,积极参与社群活动,线上线下一起互动。

    想了解更多测试、开发的知识、技能,或者职业规划,可以交流😍

     

     

     

    展开全文
  • 最近利用些业余时间自己编写了一个小型自动化测试框架,在设计过程中自己也渐渐对自动化框架的作用有了些新的认识,希望能和大家分享一下。其实设计这个框架最初的动机是来源于工作中的一个任务——同事让我维护一个...
  • 前面说过了,如果你稍微懂得TestNG这个单元测试框架,到目前这个简单的Java接口自动化测试框架主体的骨架部分已经完成设计并实现。这篇,继前篇的基础上,把测试用例中获取响应状态码和响应数据转换成JSON格式这些...

           前面说过了,如果你稍微懂得TestNG这个单元测试框架,到目前这个简单的Java接口自动化测试框架主体的骨架部分已经完成设计并实现。这篇,继前篇的基础上,把测试用例中获取响应状态码和响应数据转换成JSON格式这些经常重复的代码,给提取出来,构造成方法来调用。然后就是给这个框架添加一个日志输出功能,方便得到运行结果和运行出错的情况下的debug。

    1.添加log输出支持

    1.1 maven依赖引入

          这里,我试过apache log4j.jar 和slf4j.jar,由于log4j在maven项目上不能自动识别log4j.properties这个资源文件,最后我还是选择了maven引入slf4j.jar,在maven 配置文件pom.xml添加如下依赖,然后保存。

    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-log4j12</artifactId>
    	<version>1.7.2</version>
    </dependency>

    1.2 新建src/main/config资源包

          在Eclipse上点击当前项目名,右键new -source folder,输出src/main/config,点击确定,然后在src/main/config下新建一个log4j.properties文件,内容如下。

    ### set log levels ###
    log4j.rootLogger = INFO, stdout, file
    
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss SSS} %-5p %c{1}:%L - %m%n
    
    log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.File = ./log/apilog.log
    # overwirte the old log file
    log4j.appender.file.Append = false      
    ## 
    log4j.appender.file.Threshold = INFO
    log4j.appender.file.layout = org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss SSS} %-5p %c{1}:%L - %m%n
    
    

    1.3 在项目根目录下新建log文件夹

         新建这个文件夹是上面log4j.properties文件我们设置的日志保存文件路径是在./log文件夹下。大致的项目结构图如下

    2.优化RestClient.java内容

          主要是把在测试断言中经常需要拿到的响应状态码和json解析之前需要把响应内容转换成json格式,这部分内容给提取到方法里。然后我们写上log输出。(完整代码请看文件结尾处百度云链接)

    2.1.RestClient类添加日志输出和代码提取成方法

    package com.qa.restclient;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.http.ParseException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpDelete;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.apache.log4j.Logger;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    
    public class RestClient {
    	
    	final static Logger Log = Logger.getLogger(RestClient.class);
    	
    	/**
    	 * 不带请求头的get方法封装
    	 * @param url
    	 * @return 返回响应对象
    	 * @throws ClientProtocolException
    	 * @throws IOException
    	 */
    	public CloseableHttpResponse get (String url) throws ClientProtocolException, IOException {
    		
    		//创建一个可关闭的HttpClient对象
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    		//创建一个HttpGet的请求对象
    		HttpGet httpget = new HttpGet(url);
    		//执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收
    		Log.info("开始发送get请求...");
    		CloseableHttpResponse httpResponse = httpclient.execute(httpget);
    		Log.info("发送请求成功!开始得到响应对象。");
    		return httpResponse;
    	}
    	
    	/**
    	 * 带请求头信息的get方法
    	 * @param url
    	 * @param headermap,键值对形式
    	 * @return 返回响应对象
    	 * @throws ClientProtocolException
    	 * @throws IOException
    	 */
    	public CloseableHttpResponse get (String url,HashMap<String,String> headermap) throws ClientProtocolException, IOException {
    			
    		//创建一个可关闭的HttpClient对象
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    		//创建一个HttpGet的请求对象
    		HttpGet httpget = new HttpGet(url);
    		//加载请求头到httpget对象
    		for(Map.Entry<String, String> entry : headermap.entrySet()) {
    			httpget.addHeader(entry.getKey(), entry.getValue());
    		}
    		//执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收
    		CloseableHttpResponse httpResponse = httpclient.execute(httpget);
    		Log.info("开始发送带请求头的get请求...");	
    		return httpResponse;
    	}
    	
    	/**
    	 * 封装post方法
    	 * @param url
    	 * @param entityString,其实就是设置请求json参数
    	 * @param headermap,带请求头
    	 * @return 返回响应对象
    	 * @throws ClientProtocolException
    	 * @throws IOException
    	 */
    	public CloseableHttpResponse post (String url, String entityString, HashMap<String,String> headermap) throws ClientProtocolException, IOException {
    		//创建一个可关闭的HttpClient对象
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    		//创建一个HttpPost的请求对象
    		HttpPost httppost = new HttpPost(url);
    		//设置payload
    		httppost.setEntity(new StringEntity(entityString));
    		
    		//加载请求头到httppost对象
    		for(Map.Entry<String, String> entry : headermap.entrySet()) {
    			httppost.addHeader(entry.getKey(), entry.getValue());
    		}
    		//发送post请求
    		CloseableHttpResponse httpResponse = httpclient.execute(httppost);
    		Log.info("开始发送post请求");
    		return httpResponse;
    	}
    	
    	/**
    	 * 封装 put请求方法,参数和post方法一样
    	 * @param url
    	 * @param entityString,这个主要是设置payload,一般来说就是json串
    	 * @param headerMap,带请求的头信息,格式是键值对,所以这里使用hashmap
    	 * @return 返回响应对象
    	 * @throws ClientProtocolException
    	 * @throws IOException
    	 */
    	public CloseableHttpResponse put (String url, String entityString, HashMap<String,String> headerMap) throws ClientProtocolException, IOException {
    		
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    		HttpPut httpput = new HttpPut(url);
    		httpput.setEntity(new StringEntity(entityString));
    	
    		for(Map.Entry<String, String> entry : headerMap.entrySet()) {
    			httpput.addHeader(entry.getKey(), entry.getValue());
    		}
    		//发送put请求
    		CloseableHttpResponse httpResponse = httpclient.execute(httpput);
    		return httpResponse;
    	}
    	
    	/**
    	 * 封装 delete请求方法,参数和get方法一样
    	 * @param url, 接口url完整地址
    	 * @return,返回一个response对象,方便进行得到状态码和json解析动作
    	 * @throws ClientProtocolException
    	 * @throws IOException
    	 */
    	public CloseableHttpResponse delete (String url) throws ClientProtocolException, IOException {
    			
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    		HttpDelete httpdel = new HttpDelete(url);
    		
    		//发送delete请求
    		CloseableHttpResponse httpResponse = httpclient.execute(httpdel);
    		return httpResponse;
    	}
    	
    	/**
    	 * 获取响应状态码,常用来和TestBase中定义的状态码常量去测试断言使用
    	 * @param response
    	 * @return 返回int类型状态码
    	 */
    	public int getStatusCode (CloseableHttpResponse response) {
    		
    		int statusCode = response.getStatusLine().getStatusCode();
    		Log.info("解析,得到响应状态码:"+ statusCode);
    		return statusCode;
    		
    	}
    	
    	/**
    	 * 
    	 * @param response, 任何请求返回返回的响应对象
    	 * @return, 返回响应体的json格式对象,方便接下来对JSON对象内容解析
    	 * 接下来,一般会继续调用TestUtil类下的json解析方法得到某一个json对象的值
    	 * @throws ParseException
    	 * @throws IOException
    	 */
    	public JSONObject getResponseJson (CloseableHttpResponse response) throws ParseException, IOException {
    		Log.info("得到响应对象的String格式");
    		String responseString = EntityUtils.toString(response.getEntity(),"UTF-8");
    		JSONObject responseJson = JSON.parseObject(responseString);
    		Log.info("返回响应内容的JSON格式");
    		return responseJson;
    	}
    }
    

    2.2 TestNG测试用例添加日志输出

    package com.qa.tests;
    
    import java.io.IOException;
    
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.log4j.Logger;
    import org.testng.Assert;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    import com.alibaba.fastjson.JSONObject;
    import com.qa.base.TestBase;
    import com.qa.restclient.RestClient;
    import com.qa.util.TestUtil;
    
    public class GetApiTest extends TestBase {
    	
    	TestBase testBase;
    	String host;
    	String url;
    	RestClient restClient;
    	CloseableHttpResponse closeableHttpResponse;
    	
    	final static Logger Log = Logger.getLogger(GetApiTest.class);
    	
    	@BeforeClass
    	public void setUp() {
    		
    		testBase = new TestBase();
    		//Log.info("测试服务器地址为:"+ host.toString());
    		host = prop.getProperty("HOST");
    		//Log.info("当前测试接口的完整地址为:"+url.toString());
    		url = host + "/api/users?page=2";
    		
    	}
    	
    	@Test
    	public void getAPITest() throws ClientProtocolException, IOException {
    		Log.info("开始执行用例...");
    		restClient = new RestClient();
    		closeableHttpResponse = restClient.get(url);
    		
    		//断言状态码是不是200
    		Log.info("测试响应状态码是否是200");
    		int statusCode = restClient.getStatusCode(closeableHttpResponse);
    		Assert.assertEquals(statusCode, RESPNSE_STATUS_CODE_200, "response status code is not 200");
    		
            JSONObject responseJson = restClient.getResponseJson(closeableHttpResponse);
            //System.out.println("respon json from API-->" + responseJson); 
            
            //json内容解析
            String s = TestUtil.getValueByJPath(responseJson,"data[0]/first_name");
            Log.info("执行JSON解析,解析的内容是 " + s);
            //System.out.println(s);
            Log.info("接口内容响应断言");
            Assert.assertEquals(s, "Eve","first name is not Eve");
            Log.info("用例执行结束...");
    	}
    	
    	
    }
    

         这里,我强调下,我在上面BeforeClass部分无法引入Log输出,上面代码我注销了日志打印,如果不注销,这块会报空指针异常,很奇怪,只有在@BeforeClass中报错,在@Test中没有,我花了一些时间,还是搞不懂这块,所以,就放弃在beforeclass部分添加日志输出。

    看看在./log/api.log的日志输出效果

    2018-05-26 17:39:21 864 INFO  TestBase:28 - 正在读取配置文件...
    2018-05-26 17:39:21 926 INFO  TestBase:28 - 正在读取配置文件...
    2018-05-26 17:39:21 943 INFO  GetApiTest:39 - 开始执行用例...
    2018-05-26 17:39:22 463 INFO  RestClient:41 - 开始发送get请求...
    2018-05-26 17:39:23 206 INFO  RestClient:43 - 发送请求成功!开始得到响应对象。
    2018-05-26 17:39:23 206 INFO  GetApiTest:44 - 测试响应状态码是否是200
    2018-05-26 17:39:23 207 INFO  RestClient:146 - 解析,得到响应状态码:200
    2018-05-26 17:39:23 209 INFO  RestClient:160 - 得到响应对象的String格式
    2018-05-26 17:39:23 297 INFO  RestClient:163 - 返回响应内容的JSON格式
    2018-05-26 17:39:23 299 INFO  GetApiTest:53 - 执行JSON解析,解析的内容是 Eve
    2018-05-26 17:39:23 299 INFO  GetApiTest:55 - 接口内容响应断言
    2018-05-26 17:39:23 300 INFO  GetApiTest:57 - 用例执行结束...
    

     

    说明:

     

          这个Java接口自动化测试框架,更适合于接口的单元测试。也就是说,写接口测试用例的人员必须会Java,必须掌握TestNG的基本使用。而且所有的接口测试用例都是以一个个不同TestNG类文件组成。所以,这个框架无法帮助黑盒测试人员完成接口自动化测试,只适合会写单元测试的自动化测试人员,依赖单元测试框架去管理和运行接口测试用例,拿到测试报告。当然,后续可以扩展支持Jenkins持续集成和测试。

          由于个人在大型项目接口自动化方面经验欠缺,只能完成目前这个简单的接口自动化测试框架。所以,这个接口自动化测试框架设计系列文章就先到这里结束。最后,贴出整个项目的完整源码,百度云链接,点击这里

    2018-08-21 更新

             QQ群有朋友,在这个接口自动化框架基础之上,优化了很多内容,有token传参,特别是报告这块,他还特意写了博客文章总结,非常感谢 “池同学”,大家请移步到他博客去看看改良的框架。博客文章地址:https://blog.csdn.net/qq_34693151

     

    展开全文
  • UI测试接口测试自动化测试平台架构设计,一个大型企业如何实现测试自动化的首选框架
  • 自动化测试框架设计思路

    千次阅读 2019-09-12 15:42:31
    1.自动化测试框架的概念 2.框架的驱动模式 2.1 数据驱动模式 2.2 关键字驱动模式 3.设计框架的原则 3.1 高内聚低耦合 3.2 脚本分离 3.3 模块化设计用例,脚本的可重用 3.4 封装基础方法

    1.自动化测试框架的概念

    它是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。
    以常见的前端UI测试为例,一个测试框架大概包括测试对象,测试组件,基础类和函数,工具类,测试数据,异常处理,测试日志,断言和测试报告等这些模块。

    2.框架的驱动模式

    2.1 数据驱动模式

    如果被测系统业务逻辑固定不变或变动较小,我们可以使用数据驱动,通过不同数据来保证测试覆盖率,通常数据都是保存在外面文件或数据库中,运行时自动获取。特点是数据与测试脚本分离,基于模块化的测试库,一个驱动脚本可以执行多个相似测试,这样非常容易建立新测试。

    2.2 关键字驱动模式

    关键字驱动测试也被称为“表格驱动测试”或“操作名测试”,他是一种软件自动化测试的方法论,将数据与关键字结合来描述如何使用数据执行测试。这种方法具备数据驱动的优势,同时非编程人员也能建立新类型测试。例如Robot Framework就是典型的关键字驱动模式。

    2.3 模块驱动测试

    模块驱动测试使用独立的小脚本来对应待测试的模块、零件和子功能。这些不同层级的小脚本按照一定规则组合成更大级别的测试,如此就实现了一个特定功能的自动化测试案例。在所有自动化测试架构中,这应该是最容易领会和控制的一种,其应用非常广泛,即屏蔽组件的内部实现,仅提供组件的对外抽象接口。如此下层的测试组件发生变动时,对上层自动化测试案例来说是透明的。模块驱动测试引入了抽象和封装的原则,目的是提升自动化测试的可维护性和可扩展性。

    2.4 混合自动化测试

    混合自动化测试是由其他自动化测试框架综合发展起来的。成功的自动化测试框架通常融合了“关键字驱动测试”和“数据驱动测试”。他们即拥有测试逻辑与测试数据相互分离的优点,又集成了关键字驱动的先进架构。这一架构会使得数据驱动脚本更加简洁,并减少运行时意外失败的可能性。另一方面,该架构可以实现一些纯粹的“关键字驱动测试”难以实现的自动化测试任务。该架构由核心数据驱动引擎、功能函数组件,以及支持库所构成。

    2.5 基于模型测试

    基于模型测试适合于采用“基于模型设计”的软件系统。在这种架构下,会有一个成熟的测试模型来描述测试数据的所有方面,以及测试案例和案例执行环境。通常这一测试模型是全部或者部分从待测试系统功能模型中提取出来的。测试模型描述了待测试系统的抽象行为,因此从测试模型中可以派生出功能测试案例。这些测试案例构成了抽象测试案例集,不过抽象测试案例集不能直接在待测试系统上执行。真正可以执行的测试案例集(可以与待测试系统进行交互),是从抽象测试案例集派生出来的。有些基于模型测试的测试工具,支持从模型(包含足够信息)产生可执行测试案例集,从模型派生出案例,可以有很多种方式,因此测试很多时候是依靠经验去尝试,并没有固定的最佳方法。你需要事先收集“测试需求、测试目标,用户用例"因为他们包含待测试系统模型的信息。测试案例集是从模型而非代码派生出来的,因此基于模型测试可以被视为某种黑盒测试。事实上,基于模型测试目前只适合于功能不太负责的软件系统,复杂商业软件系统的基于模型测试,还处于探索阶段。

    3.设计框架的原则

    3.1 高内聚低耦合

    高内聚就是每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码;低耦合就是模块与模块之间接口的复杂程度,比如在类内部尽可能减少方法之间的调用,否则一个方法的变动会影响调用它的另一个方法。

    3.2 脚本分离

    对象、测试数据、业务逻辑相互剥离、灵活调用,在前端UI测试上可以得到明显的效果,我们可以使用PageObject设计模式来实现对象和业务逻辑的剥离,使用DataProvider来实现数据业务逻辑分离。

    3.3 模块化设计用例,脚本的可重用

    如果时间充裕且项目提供支持,可以遵循以下顺序进行测试: 页面对象 - 功能点 - 业务逻辑 - 业务流程。
    从实现来说就是:先测试底层的页面操作对象,通过调用操作对象、及业务逻辑实现对功能点的验证,再通过调用业务逻辑组合功能点实现对业务流程的验证。不同的业务流程,对于底层的操作组件、中间层的功能点函数是完全可以复用的,只是调用的业务逻辑的差异,或者是测试数据的差异性。这样的好处是脚本相互独立性,代码复用,易维护,如有新的业务流程可以调用已有代码来组合。

    3.4 封装基础方法

    对于一些较通用的方法,可以封装,比如log,assert,异常处理,文件读写操作,数据库读写操作,保存页面截图等等。在需要的时候直接在测试用例里调用即可。

    展开全文
  • 由Saffron框架改进的QTP自动化测试框架,解决Saffron中无法统一管理对象、无法识别同一页面相同对象问题,适用于Web自动化测试。
  • 源文件下载地址:https://download.csdn.net/download/guaishounan/12920181
  • Jmeter接口自动化测试框架是我自己写的文档,很适合想入门接口自动化的人,该文档很详细,没有一点跳步,值得想入门的人看
  • 该文档是基于python的自动化测试框架的搭建,详细介绍了框架的具体信息以及各个模块的含义,对于最终搭建该框架起到重要作用。
  • 这个接口自动化测试框架到目前为止,我们已经完成了Get请求的封装和必要的工具类的支持。接下来这篇,我来介绍如何完成POST请求的封装过程。一般来说,在一个项目中,接口测试很多时候就是测试Get和POST方法,其他的...
  • Java接口自动化测试框架设计-2-Get请求方法和测试

    万次阅读 多人点赞 2018-05-22 00:11:42
    这篇开始,我来介绍通过代码逐步实现接口自动化测试框架的设计过程。先不要着急,框架设计我们只是介绍基本的组件,而且框架设计没有想象那么难,一步一步跟着做就会了。这篇我们来演示,如果通过Java代码来实现一个...
  • 然后针对这个,设计了现在的UI自动化测试框架,实现了简单的通用,每次只需要维护好用例就行了,维护成本降低。 大家都知道,基于selenium函数,对页面元素的操作,很多都是点击、输入参数、处理iframe、处理alert...
  • 自动化测试框架设计思路

    千次阅读 2017-12-18 13:55:30
    1.1.自动化测试的优点 ...1.2.为什么要做自动化测试框架  通过以往的尝试,发现真正实现自动化测试,并不是掌握了某个自动化测试工具,掌握了脚本的编写技术就能够达成,面对复杂的ERP系统,简单的录制/
  • http接口测试—自动化测试框架设计

    千次阅读 2018-03-05 14:29:32
    输入:根据接口描述构造不同的参数输入值(Json格式) 输出:字符串(传入的方式+传入的字符串) http://localhost:8090/lctest/TestServer  二、程序设计 1、Client程序设计 读取Excel配置的测试用例数据 发送...
  • Python+Selenium框架设计篇之1-什么是自动化测试框架

    万次阅读 多人点赞 2017-04-18 09:51:34
    1.什么是自动化测试框架  简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境。自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式、平台执行...
  • 基于python的自动化测试框架的分析与设计,由王聪颖编写,来源于知网
  • selenium自动化测试框架PO设计模式

    万次阅读 多人点赞 2019-06-21 22:20:54
    整理一下 selenium 自动化测试实践中使用较多的 PO(PageObject)设计模式 面向对象的特性:封装\继承\多态.在自动化中一样适用,selenium 自动化测试中有一个名字常常被提及 PageObject(思想与面向对象的特性相同),...
  • 通用UI自动化测试框架源码 2.0版本,对元素操作方法、检查点、回退操作再此进行抽象。...然后针对这个,设计了现在的UI自动化测试框架,实现了简单的通用,每次只需要维护好用例就行了,维护成本降低
  • 自动化测试框架设计时应该考虑的20个方面
  • 背景:公司原架构使用的是ruby作为后台开发语言,数据库为pgsql,为适应大数据后台发展方向,后台...由于模块涉及接口比较多,如果每次改动或者迭代发版,需要大量手动回归测试----于是解放双手---走向自动化。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 243,540
精华内容 97,416
关键字:

自动化测试框架设计