autest/README.md

293 lines
15 KiB
Markdown
Raw Normal View History

2020-07-30 22:05:55 +08:00
# autest
## 简介
### autest设计初衷
autest为Auxiliary Test的英文缩写意为辅助测试其中包括日常测试工作中能用到的工具包括测试用例编写工具简化Web UI自动化测试工具以及测试报告生成工具和日常工作中使用的小工具等。开发这个项目的目的在于使用简单的代码来简化我们测试日常中较为繁杂的操作使测试的效率得到一定的提升。
autest比起说是一个工具不如说是我在工作中的一个总结在我看来测试工作就是一个机械式的工作既然是机械式的工作就应该用机械来代替抱着这个想法于是我就启动了这个项目。但我并不是开发转测试在大学学习的也是化学工程专业并未系统地学习过软件工程所以在编写代码时会有许多与开发规范不符合的地方关于这点希望大家能在使用时多多海涵同时也希望大家能对工具多多批评和指点我会尽可能地做出改正使工具更加地完善。
### 目标
autest的目标是使用代码来简化繁杂的测试工作让测试工作变得轻松同时也让不会写代码的测试工程师开始熟悉代码通过代码编写自动化测试脚本脱离被自动化测试软件束缚让自动化测试变得更加自由。
## 工具概要
| 模块 | 介绍 |
|---------------------|----------------|
|auxiliary.tool|包含日常测试工作中可以使用的测试工具,例如表格处理工具、文本处理工具、日期处理工具等|
|auxiliary.work.selenium|对Web UI自动化工具selenium的二次封装简化了selenium中比较复杂的代码|
|auxiliary.work.testcase|用于编写测试用例的工具|
|auxiliary.work.http|用于做接口测试时使用的工具|
|auxiliary.work.sql|用于对oralc数据库简单查询的工具|
## 工具介绍
目前整个项目比较成熟的工具是测试用例编写工具和Web UI自动化辅助编码工具下面我将主要介绍这两个工具的使用。
### 1 测试用例编写工具
该工具是通过预先写好的测试用例文件模板调用其中添加内容的方法对测试用例进行编写之后再生成一个Excel文件以方便测试用例阅读与上传。当然看到这许多人就有疑问了既然最后要生成一个Excel文件那编写测试用例直接在Excel文档里写就好何必还要编写代码然后再生成呢的确在office的Excel软件中其可视化界面确实要比写代码要强很多但Excel软件也存在上下滚动不方便的缺点并且大家也清楚很多测试用例都可以复用在编写过程中难免会有大量的复制和替换的工作对于少量的用例还好一旦用例较多时复制用例后就容易遗漏需要替换文本的用例或者多复制用例导致编写出错。为解决这一类的问题所以我封装了一个测试用例编写工具将测试用例的编写工作由Excel向eclipse不要问我为什么不用IDEA有伤T_T转移当然缺点就是可视化差了一些。
测试用例工具暂时做了Jira用例模板故此处以Jira为例讲解工具的使用在最后再讲解测试用例模板的扩展。
2020-08-06 22:24:59 +08:00
2020-07-30 22:05:55 +08:00
#### 1.1 测试用例文件创建
##### 1.1.1 测试用例模板配置文件创建
在编写测试用例时,我们需要有一个存放测试用例的文件,之后在文件中编写测试用例,程序中也不例外,首先我们需要创建测试用例模板文件,该模板文件可以是自行创建,也可以是根据配置文件中编写的内容,通过程序进行创建,个人建议选择后者,因为我们创建的配置文件模板是符合我们在类中定义的字段位置的,若是通过自行创建的模板,此时可能遗漏字段或字段位置有误,导致程序失效。下面将介绍如何使用配置文件来创建测试用例模板。
首先配置文件采用xml的文件形式其内容主要是对测试用例模板文件中一些基本的参数进行配置例如行宽、字段名称、是否居中等等其结构如下
```xml
<?xml version='1.0' encoding='UTF-8'?>
<templet>
<sheet name='测试用例' freeze='2'>
<column id='标题' name='Name' wide='30.88' align='left'/>
<column id='步骤' name='Test Script (Step-by-Step) - Step' wide='45.75' align='left' row_text='1' index='true'/>
<datas id='优先级'>
<data name='High' />
<data name='Normal' />
<data name='Low' />
</datas>
<datas id='项目'>
<file path='JiraCaseFileTemplet/Jira数据有效性.xlsx' regex='Sheet1' column='0' start_row='1' />
</datas>
</sheet>
</templet>
```
配置文件中的标签解释如下:
- templet是根标签其不包含属性可包含多个sheet标签
- sheet标签表示其下的字段标签或数据有效性标签写入的工作簿位置该标签下可有多个column和datas标签其具有以下属性
| 属性 | 介绍 |
|-------------|------------|
|name|工作簿的名称,该属性必须存在|
|freeze|需要冻结的列数值为2表示冻结前两列若不写则表示不冻结|
- column标签表示需要生成到文件中的字段其具有以下属性
| 属性 | 介绍 |
|-------------|------------|
|id |程序中的标识符,在程序中填写内容时使用该字段作为传参,该属性必须存在|
|name|在测试用例模板中的字段名称,该名称不能作为程序中的传参,该属性必须存在|
|wide|字段在模板文件中所占的宽度,该属性必须存在|
|align|字段内容在模板文件中的对其方式有三个可选值left左对齐、center(居中对齐)、right右对齐该属性必须存在|
|row_text|字段每段内容在文件中所占的行数值为1表示每段内容在文件中占1个单元格一段一分行若无该属性则表示所有内容只写在一个单元格中|
|index|字段每段内容是否自动加上编号有两个可选值true创建编号、false不创建编号若无该属性则默认为false|
- datas标签表示写在sheet标签中的数据有效性内容可包含多个data和file标签其具有以下属性
| 属性 | 介绍 |
|-------------|------------|
|id|程序中的标识符,在程序中填写内容时使用该字段作为传参,该属性必须存在|
- data标签表示数据有效性的内容是直接写在xml文件中的数据有效具有以下属性
| 属性 | 介绍 |
|-------------|------------|
|name|数据有效性的内容,该属性必须存在|
- file标签表示数据有效性的内容该标签表示需要读取写在其他文件中的数据有效性可与data标签同时存在不会冲突具有以下属性
| 属性 | 介绍 |
|-------------|------------|
|path|文件所在路径支持word文件、excel文件、txt文件以及csv文件该属性必须存在|
|regex|内容切分规则若为excel文件则需要写入需要读取sheet名称若为文本文件则传入切分文件的规则对csv文件则无效该属性必须存在|
|column|需要读取的列,该属性必须存在|
|start_row|需要读取的起始行,该属性必须存在|
|end_row|需要读取的结束行,该属性必须存在|
***注意file标签所有属性完全参考 pres.auxiliary.work.selenium.datadriven.ListFileRead 类的内容支持的文件及参数介绍可查询该类的api***
##### 1.1.2 通过配置文件并创建测试用例模板文件
当我们编辑完配置文件后调用CreateCaseFile中的create()方法即可完成测试用例模板文件的创建具体方法如下假设xml文件放在ConfigurationFiles/jira测试用例导入模板.xml路径下
```java
@Test
public void createCaseTemplate() {
//模板文件类对象,指向模板文件生成的路径
File tempFile = new File("Result/测试用例.xlsx");
//配置文件类对象指向xml配置文件的存放路径
File conFile = new File("ConfigurationFiles/jira测试用例导入模板.xml");
//构造对象
CreateCaseFile ccf = new CreateCaseFile(conFile, tempFile);
//创建文件
ccf.create();
}
```
在类中,有提供一种文件的保护机制,在多次生成同一个文件时,是否允许直接覆盖文件,默认是不允许直接覆盖文件,及多次创建文件名相同的文件时,程序将抛出异常,从而保护之前已创建的文件,如有需要,可通过方法将其设置为允许覆盖。例如以下两个测试方法:
```java
@Test
public void createCaseTemplate() {
//模板文件类对象,指向模板文件生成的路径
File tempFile = new File("Result/测试用例.xlsx");
//配置文件类对象指向xml配置文件的存放路径
File conFile = new File("ConfigurationFiles/jira测试用例导入模板.xml");
//构造对象
CreateCaseFile ccf = new CreateCaseFile(conFile, tempFile);
//设置允许覆盖文件
temp.setCoverFile(true);
temp.create();
temp.create();
}
@Test(expectedExceptions = IncorrectFileException.class)//捕捉IncorrectFileException异常
public void createCaseTemplate() {
//模板文件类对象,指向模板文件生成的路径
File tempFile = new File("Result/测试用例.xlsx");
//配置文件类对象指向xml配置文件的存放路径
File conFile = new File("ConfigurationFiles/jira测试用例导入模板.xml");
//构造对象
CreateCaseFile ccf = new CreateCaseFile(conFile, tempFile);
//设置不允许覆盖
temp.setCoverFile(false);
temp.create();
temp.create();//此时再次调用 创建方法时将抛出IncorrectFileException异常
}
```
到此,我们查看生成测试用例文件的路径中,已经存在我们测试用例模板文件,可继续进行下一步操作。
2020-07-30 22:05:55 +08:00
#### 1.2 测试用例编写
2020-08-06 22:24:59 +08:00
##### 1.2.1 基本用例编写类
首先通过以下xml文件来生成一个测试用例文件模板
```xml
<?xml version='1.0' encoding='UTF-8'?>
<templet>
<sheet name='测试用例' freeze='2'>
<column id='标题' name='Name' wide='30.88' align='left'/>
<column id='目的' name='Objective' wide='18.25' align='left'/>
<column id='前置条件' name='Precondition' wide='18.25' align='left' index='true'/>
<column id='步骤' name='Test Script (Step-by-Step) - Step' wide='45.75' align='left' row_text='1' index='true'/>
<column id='预期' name='Test Script (Step-by-Step) - Expected Result' wide='45.75' align='left' row_text='1' index='true'/>
<column id='模块' name='Folder' wide='22.00' align='center'/>
<column id='状态' name='Status' wide='10.00' align='center'/>
<column id='优先级' name='Priority' wide='10.00' align='center'/>
<column id='项目' name='Component' wide='10.00' align='center'/>
<column id='设计者' name='Owner' wide='10.00' align='center'/>
<column id='关键用例' name='关键用例' wide='10.00' align='center'/>
<column id='关联需求' name='Coverage (Issues)' wide='20.00' align='center'/>
<datas id='状态'>
<data name='Approved' />
<data name='Draft' />
<data name='Deprecated' />
</datas>
<datas id='优先级'>
<data name='High' />
<data name='Normal' />
<data name='Low' />
</datas>
<datas id='关键用例'>
<data name='是' />
<data name='否' />
</datas>
</templet>
```
得到测试用例模板文件后我们则需要通过用例模板文件对象和创建模板使用的xml文件对象来构造编写测试用例的类对象这里我们需要调用包中的BasicTestCaseWrite类框架选用TestNG
```java
/**
* 写在方法外,便于在测试方法中调用
*/
BasicTestCaseWrite wtc;
/**
* 配置文件类对象
*/
File conFile = new File("ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/jira测试用例导入模板.xml");
/**
* 模板文件类对象
*/
File tempFile = new File("Result/测试用例.xlsx");
@BeforeClass
public void createTemplet() throws DocumentException, IOException {
CreateCaseFile temp = new CreateCaseFile(conFile, tempFile);
temp.setCoverFile(true);
temp.create();
wtc = new BasicTestCaseWrite(conFile, tempFile);
}
```
得到了测试用例类对象后,我们则需要对需求中的内容设计测试用例。假设有一个需求,需要对创建账号界面进行测试,界面上有一个姓名文本框(非必填,无输入限制)和一个身份证文本框(必填,校验是否为正确的身份证号),那么,我们需要在测试用例中添加以下用例(简单编写):
* 对姓名文本框的测试用例:
```
标题:
通过不同的姓名创建账号
目的:
验证创建账号界面各个控件输入是否有效
前置条件:
1.已在创建账号界面
2.除姓名字段外,其他信息均正确填写
步骤:
1.“姓名”文本框不输入任何信息,点击“保存”按钮
2.在“姓名”文本框中只输入空格,点击“保存”按钮
3.在“姓名”文本框中输入HTML代码点击“保存”按钮
预期:
1.账号创建成功
2.账号创建成功
3.账号创建成功且HTML代码不会被转义
模块:
/测试项目/账号管理/创建账号
状态:
Approved
优先级:
Normal
项目:
设计者:
test
关键用例:
关联需求:
TEST-1
```
* 对身份证文本框的测试用例:
```
标题:
通过不同的身份证创建账号
目的:
验证创建账号界面各个控件输入是否有效
前置条件:
1.已在创建账号界面
2.除身份证字段外,其他信息均正确填写
步骤:
1.“身份证”文本框不输入任何信息,点击“保存”按钮
2.在“身份证”文本框中只输入空格,点击“保存”按钮
3.输入15位的证件信息点击“保存”按钮
4.输入18位的证件信息点击“保存”按钮
5.输入末尾带“X”或“x”的证件信息点击“保存”按钮
6.输入大于18位的数字点击“保存”按钮
7.输入小于18位但大于15位的数字点击“保存”按钮
8.输入小于15位的数字点击“保存”按钮
9.输入不符合证件规则但长度符合规则的数字如123456789012345678点击“保存”按钮
10.输入非数字字符,点击“保存”按钮
预期:
1.账号创建失败,并给出相应的提示
2.账号创建失败,并给出相应的提示
3.账号创建成功
4.账号创建成功
5.账号创建成功
6.账号创建失败,并给出相应的提示
7.账号创建失败,并给出相应的提示
8.账号创建失败,并给出相应的提示
9.账号创建失败,并给出相应的提示
10.账号创建失败,并给出相应的提示
模块:
/测试项目/账号管理/创建账号
状态:
Approved
优先级:
Normal
项目:
设计者:
test
关键用例:
关联需求:
TEST-1
```
设计好测试用例后,我们则需要将相应的字段,以及内容写入到代码中:
##### 1.2.2 jira用例编写类的使用
2020-07-30 22:05:55 +08:00
#### 1.3 测试用例模板
##### 1.3.1 测试用例模板使用
##### 1.3.2 测试用例模板扩展
#### 1.4 测试用例字段标记
#### 1.5 测试用例模板扩展
##### 1.5.1 测试用例字段xml文件的编写
##### 1.5.2 测试用例模板类基类的继承
##### 1.5.3 测试用例模板类字段枚举(可选)