aototest(V1.0 以线上运行)
maven+TestNG+selenium+Excel的UI自动化框架升级版本解剖图
项目简介
maven:是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理。这里主要用到它的jar包管理
TestNG:是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集成测试
框架结构雏形

base:里面有个基类 (BaseParpare.java),这个类的主要作用是启动(启动浏览器使用了TetsNG的@BeforeClass)和关闭浏览器的作用(关闭浏览器使用了TetsNG的@AftereClass)
pages:页面元素类,每一个java类,都是一个页面,存放的都是对应页面的所有元素定位值。
pageshelper:这个包主要存放的是对应页面的帮助类
plugins:主要存放的是arrow插件以及第三方插件。
testcases:顾名思义就是存放测试用例的地方
utils:这个包主要是封装了各种工具类,Selenium api封装类,读取属性文件类和选择浏览器类等
config目录:存储框架类所需的所有属性文件,比如arrow的配置文件以及自定义的一些属性文件。
res目录:主要存放的是driver
result目录:存储测试框架运行测试用例生成的报告(包含log,截图
LoginPage_001_LoginSuccessFunction_Test:第一部分:LoginPage表明你是哪个模块的;第二部分:001,分用例编号;第三部分:LoginSuccessFuntion这个是你用例具体要干嘛的一个简称;第四部分:Test每个用例以这个作为结尾后缀。每个部分之间必须以下划线”_”作为分隔符 。
编写代码
1.这个类的主要作用是启动和关闭浏览器


2. 这个包主要存放的是对应页面的帮助类

3. 主要存放的是arrow插件以及第三方插件

4.存放测试用例的地方。在这个包下,还会有很多子包,子包的个数根据你测试的系统的模块来划分

5.这个类配置了log,封装测试平台和测试浏览器选择工具类 。这个类封装了Selenium API

6.driver的配置文件,arrow的配置文件

7.用浏览器测试所需要的driver

8.存储测试框架运行测试用例生成的报告(包含log,截图等)

9. maven的配置文件,项目核心配置,用于构建项目、自动下载项目依赖以及后续的和testng、jenkins配合持续集成等

aototest - 测试框架(V2.0)
1.项目简介
什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动。数据驱动包含了数据,他就是测试数据,在自动化领域里,提倡数据分离,也就是说,测试用例和测试数据是分开(存储)的。在本框架设计中,采用的是Excel存储测试数据。

2.框架更改详解
2.1 更改用例类:LoginPage_001_LoginSuccessFunction_Test.java
更改后数据不是写在代码中,而是从excel中读取。那么怎么让读取数据,且对应用例呢?
2.2 测试数据如何保存-设计excel

先看看如何设计excel:
excel的表名以模块名命名。excel中,有个sheet,名字为'001',对应用例编号,和设计用例的的类名第二部分是对应的,也就是说一个sheet就是一个测试用例的数据。在执行测试用例的时候,通过模块名字找到对应的excel,然后再根据对应的用例编号找到对应的sheet,最后在读取excel数据。
2.3 通过数据提供者获取测试数据
通过数据提供者(@DataProvider)来传递给测试用例,这里将数据提供者代码放置在BaseParpare.java中,目的是为了每次运行一个用例都会读取对应的测试用例。

增加ExcelDataProvider.java与pomjar依赖
aototest(V3.0)
1 关键字驱动概述
关键字驱动测试(Keyword-driven testing),也叫做表格驱动测试或者基于行为词的测试。
关键字驱动到底是什么样的?动作也就是关键字,比如你选择了“点击”操作,就意味着这步骤会执行一个元素点击操作。
关键子驱动是如何实现的:
问:那么如何定义动作?
答:在框架设计的时候会专门设计一个类,来实现各种“动作”的具体内容。当你在excel中读取了一个“动作”之后,框架会自动解析这个“动作”背后的事情。在测试框架中这个类的名字叫做:SuperAction.java。
问:如何定义和解析元素定位?
答:每个页面是一个excel,所有元素的定位方式和定位值都保存在里面
问:如何用例存储?
答:一个excel就是一个模块,然后这个excel文件中一个sheet就是这个模块中的一条用例
问:Excel文件如何执行测试?
答:excel文件存储用例,但excel只是文件,如何调用测试入口呢?其实在关键字驱动框架中,有一个用例生成类(TestCaseFactoryForSingle.java,TestCaseFactoryForAll.java),它可以遍历所有excel的所有sheet,生产一条条用例类,
关键字优缺点:
优点:只需要自动化测试人员封装好相关关键字操作,就可以提供给黑盒测试人员用,黑盒测试人员只需要掌握元素定位的方式以及对关键字框架的使用即可·条理清晰,很容易上手使用
缺点:需要自动化测试人员花费大量时间提前把关键字框架中的操作提前封装好对于复杂的测试需求,关键字框架对于操作的封装难度较大
2.在原来的框架下更改,如下图所示
1. 关键子驱动与数据驱动比较

3.解析新增页面目录
page: 存储页面元素的目录,在此目录下每个页面是一个excel,会替换原先框架的com.demo.test.pages包,所示。

page 元素定位excel
4. 解析新增测试用例目录
testcase:存储测试用例的目录,每个模块一个excel文件,每个excel文件中的sheet是一条测试用例,会替换原先框架的com.demo.test.pageshelper包和data目录。
5.解析新增测试用例目录
testcase:存储测试用例的目录,每个模块一个excel文件,每个excel文件中的sheet是一条测试用例,会替换原先框架的com.demo.test.pageshelper包和data目录。

用例Login的Actions
测试用例excel是用于存储测试用例步骤、步骤中涉及的动作和测试数据等内容,命名规则如下:
1.excel文件命名规则为:“模块名称.xlsx”;
excel中第二个sheet命名规则:“001_LoginSuccessFunction”来自原框架测试代码中的部分内容,也就是省略了“页面名称_”:HomePage_和尾部的“_Test”部分:_Test,这两部分省略的部分在生成代码的时候会自动添加。
注意:测试用例excel文件sheet“001_LoginSuccessFunction”中的“动作”),这列是通过sheet“Actions”中的“动作名称”列来赋值的:选择“动作”列,如下图所示,整列已经变灰色,表明整列已经被选中。点击excel顶部的“数据”tab -> 数据验证:在数据验证-设置中选择验证条件为:序列并勾选“忽略空值”和“提供下拉箭头”,点击来源最右边的带箭头的按钮,点击sheet 'Actions',选择A2到A26(鼠标左键先点击A2不放,然后拖拽至A26),此时注意数据验证框的变化:=Actions!$A$2:$A$26,点击回车键。

用例excel替换pagehelper类和data excel
6. 解析自动生成代码
自动生成代码TestCaseFactoryForSingle.java,
TestCaseFactoryForSingle.java这个类,这个类主要是用于生成指定模块的测试用例,这个类有一个main方法,当你执行之后,会提示你输入要生成测试代码的模块。这里的模块的名字就是testcase目录下的excel文件名字(不包含后缀),然后回车,
此时回到src/com/demo/test/testcases/login包下查看,一条用例生成了 LoginPage_001_LoginSuccessFunction_Test.java,所示.
dependency>
groupId>org.apache.poigroupId> artifactId>poi-ooxmlartifactId>
version>3.10-FINALversion>
dependency>
automation
1.框架简介
APIAutoTest是处理API接口的轻量级自动化测试框架,Java语言实现,基于TestNG测试框架,支持持续集成,自动构建与测试。

2. 配置
主要用于自动化测试和统计当前文档的接口数目。主要包含的信息:接口协议、接口域名、接口配置列表。
- 接口协议:测试接口的网络协议,如:http、https,其他协议,等待以后版本支持。
- 接口域名:测试接口的域名。
- 接口配置参数:主要包括测试 ID、接口名称、运行模式、测试结果。
具体模板显示如下:

3. 公共参数
此表用于存储测试前设定好的参数和测试过程中提取出来的参数,以 `key,value` 的形式存储。sheet 名规定是`公共参数`,不可变化。如图所示

4. 接口测试数据
每个接口的测试数据占用一个 sheet 表。数据包括几个部分:sheet 名、接口路径、接口说明、接口参数组合,其中接口参数组合又细分为:接口调用方法、接口参数、测试预期结果、测试实际结果、提取公共参数。完整的例子如图所示:

4.1 sheet 名
一般使用接口名称,与 **配置表 - 接口配置参数-接口名称** 相对应。
4.2 接口路径
接口路径,是接口测试 url 中域名后面,参数前面的部分,如:
```
/api/members/members/password_login # 接口测试路径样式
```
4.3 接口说明
对于接口用途的一个简要说明。
4.4 接口参数组合
1. 调用方法。一般为 http 协议的调用方法,如:`GET、POST` 等
2. 参数列表。接口的所有参数,必填和非必填。测试时,非必填参数可为空;异常情况测试,必填参数也可以为空。每个接口所要求的参数数目不一样,编写测试用例时,每个参数占用一列即可。参数列表可支持获取公共参数形式填写(`${ziduan}`),如:mobile 这个字段想从公共参数列表获取,则可以写成`${mobile}`。
3. 接口 url。由 **协议 + 域名 + 路径 + 参数** 拼接而成的完整 url,这个数据是在测试过程中自动生成的,也可以当做对测试结果的校验。
4. 预期结果:这个数据一般从接口文档的预期结果获取的,可支持正则表达式,匹配部分测试结果。可填入字段校验:`accesstoken`,也可以填写正则表达式校验`"accesstoken":"[a-zA-Z0-9]*"`。
5. 实际测试结果。在测试过程中,按照本次调用参数调用接口所产生的响应数据。
6. 是否通过测试。通过预期结果和实际测试结果的比对,得出接口当次测试是否通过。
7. 提取公共参数的名称,以`,`号区分开。如:提取两个公共参数`openid`和`accesstoken`,则可以填入`openid,accesstoken`即可。
4.5效果展示
1.数据准备

2.刚刚参数将要提取code,在第3步展示

3.提取公共参数:会把参数放到公共参数表中

4.运行框架后面,效果展示如下图

5.表示效果展示如下:



6.报告展示:

4.6结语
现在网上有很多关于接口自动化测试的工具或者框架,为什么要费力气重新写一个接口自动化测试的框架呢?因为想要一个很轻便的接口自动化测试框架,不懂技术的同学也可以使用,找过有JMeter,Postman,都不太符合我的要求,所以才有这个框架的诞生。这个框架的核心特点:轻便、使用简单。
接口自动化测试在这个追求效率的时代,而做接口自动化测试的工具很多,比如soapUI,postman,jmeter等等,但是这些通用的工具的可扩展性以及跟项目的契合度上并不是十分合适。框架的作用在于使测试脚本编写变得简单,增强测试脚本的可维护性,容错率等,提高测试脚本的编写效率,从而提高测试效率。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho