添加readme内容

This commit is contained in:
彭宇琦 2020-08-08 18:57:29 +08:00
parent 4446476b9f
commit 673c93f5c6
3 changed files with 171 additions and 17 deletions

164
README.md
View File

@ -17,8 +17,7 @@ autest的目标是使用代码来简化繁杂的测试工作让测试工作
## 工具介绍
目前整个项目比较成熟的工具是测试用例编写工具和Web UI自动化辅助编码工具下面我将主要介绍这两个工具的使用。
### 1 测试用例编写工具
该工具是通过预先写好的测试用例文件模板调用其中添加内容的方法对测试用例进行编写之后再生成一个Excel文件以方便测试用例阅读与上传。当然看到这许多人就有疑问了既然最后要生成一个Excel文件那编写测试用例直接在Excel文档里写就好何必还要编写代码然后再生成呢的确在office的Excel软件中其可视化界面确实要比写代码要强很多但Excel软件也存在上下滚动不方便的缺点并且大家也清楚很多测试用例都可以复用在编写过程中难免会有大量的复制和替换的工作对于少量的用例还好一旦用例较多时复制用例后就容易遗漏需要替换文本的用例或者多复制用例导致编写出错。为解决这一类的问题所以我封装了一个测试用例编写工具将测试用例的编写工作由Excel向eclipse不要问我为什么不用IDEA有伤T_T转移当然缺点就是可视化差了一些。
测试用例工具暂时做了Jira用例模板故此处以Jira为例讲解工具的使用在最后再讲解测试用例模板的扩展。
该工具是通过预先写好的测试用例文件模板调用其中添加内容的方法对测试用例进行编写之后再生成一个Excel文件以方便测试用例阅读与上传。当然看到这许多人就有疑问了既然最后要生成一个Excel文件那编写测试用例直接在Excel文档里写就好何必还要编写代码然后再生成呢的确在office的Excel软件中其可视化界面确实要比写代码要强很多但Excel软件也存在上下滚动不方便的缺点并且大家也清楚很多测试用例都可以复用在编写过程中难免会有大量的复制和替换的工作对于少量的用例还好一旦用例较多时复制用例后就容易遗漏需要替换文本的用例或者多复制用例导致编写出错。为解决这一类的问题所以我封装了一个测试用例编写工具将测试用例的编写工作由Excel向eclipse不要问我为什么不用IDEA我是特别不喜欢IDEA转移当然缺点就是可视化差了一些。
#### 1.1 测试用例文件创建
##### 1.1.1 测试用例模板配置文件创建
@ -136,7 +135,7 @@ public void createCaseTemplate() {
```
到此,我们查看生成测试用例文件的路径中,已经存在我们测试用例模板文件,可继续进行下一步操作。
#### 1.2 测试用例编写
##### 1.2.1 基本用例编写类
##### 1.2.1 构造用例编写类对象
首先通过以下xml文件来生成一个测试用例文件模板
```xml
<?xml version='1.0' encoding='UTF-8'?>
@ -195,8 +194,14 @@ public void createTemplet() throws DocumentException, IOException {
wtc = new BasicTestCaseWrite(conFile, tempFile);
}
@AfterClass
public void openFolder() throws IOException {
wtc.writeFile();
}
```
##### 1.2.2 添加测试用例
得到了测试用例类对象后,我们则需要对需求中的内容设计测试用例。假设有一个需求,需要对创建账号界面进行测试,界面上有一个姓名文本框(非必填,无输入限制)和一个身份证文本框(必填,校验是否为正确的身份证号),那么,我们需要在测试用例中添加以下用例(简单编写):
* 对姓名文本框的测试用例:
@ -278,10 +283,157 @@ public void createTemplet() throws DocumentException, IOException {
关联需求:
TEST-1
```
设计好测试用例后,我们则需要将相应的字段,以及内容写入到代码中:
设计好测试用例后,我们则需要将相应的字段,以及内容写入到代码中,此时,我们调用类中的
```java
addContent(String field, String... contents)
```
方法即可方法第一个参数为xml文件中字段的id属性contents参数表示需要在字段中填写的内容该参数为可变参数可传入多个值每传入一个值表示一行文本在系统内部将自动进行换行若字段值为数据有效性标签的内容则可直接传入数据数据序号需要注意的是数据序号是从1开始。具体代码如下测试方法上接章节开始时编写的代码之后的测试均是如此
```java
@Test
public void addCase() {
//添加姓名相关的用例
wtc.addContent("标题", "通过不同的姓名创建账号")
.addContent("目的", "验证创建账号界面各个控件输入是否有效")
.addContent("前置条件",
"已在创建账号界面",
"除姓名字段外,其他信息均正确填写"
)
.addContent("步骤",
"“姓名”文本框不输入任何信息,点击“保存”按钮",
"在“姓名”文本框中只输入空格,点击“保存”按钮",
"在“姓名”文本框中输入HTML代码点击“保存”按钮"
)
.addContent("预期",
"账号创建成功",
"账号创建成功",
"账号创建成功且HTML代码不会被转义"
)
.addContent("模块", "/测试项目/账号管理/创建账号")
.addContent("状态", "1")
.addContent("优先级", "2")
.addContent("项目", "")
.addContent("设计者", "test")
.addContent("关键用例", "2")
.addContent("关联需求", "TEST-1")
.end();
//添加身份证相关的用例
wtc.addContent("标题", "通过不同的身份证创建账号")
.addContent("目的", "验证创建账号界面各个控件输入是否有效")
.addContent("前置条件",
"已在创建账号界面",
"除姓身份证段外,其他信息均正确填写"
)
.addContent("步骤",
"“身份证”文本框不输入任何信息,点击“保存”按钮",
"在“身份证”文本框中只输入空格,点击“保存”按钮",
"输入15位的证件信息点击“保存”按钮",
"输入18位的证件信息点击“保存”按钮",
"输入末尾带“X”或“x”的证件信息点击“保存”按钮",
"输入大于18位的数字点击“保存”按钮",
"输入小于18位但大于15位的数字点击“保存”按钮",
"输入小于15位的数字点击“保存”按钮",
"输入不符合证件规则但长度符合规则的数字如123456789012345678点击“保存”按钮",
"输入非数字字符,点击“保存”按钮"
)
.addContent("预期",
"账号创建失败,并给出相应的提示",
"账号创建失败,并给出相应的提示",
"账号创建成功",
"账号创建成功",
"账号创建成功",
"账号创建失败,并给出相应的提示",
"账号创建失败,并给出相应的提示",
"账号创建失败,并给出相应的提示",
"账号创建失败,并给出相应的提示",
"账号创建失败,并给出相应的提示"
)
.addContent("模块", "/测试项目/账号管理/创建账号")
.addContent("状态", "1")
.addContent("优先级", "1")
.addContent("项目", "")
.addContent("设计者", "test")
.addContent("关键用例", "1")
.addContent("关联需求", "TEST-1")
.end();
}
```
运行测试方法后,可以生成如下图的效果:<br>
![image](https://github.com/pyqone/autest/blob/master/Readme/Image/TestCase/TestCase1.png)<br>
类中还提供了对字段内容进行删除、替换和插入的方法,用法基本与添加测试用例方法类似,这里就不过多赘述,您可参考工具的文档,选择性使用。
##### 1.2.2 jira用例编写类的使用
##### 1.2.3 添加字段常量
在上述测试用例中,可以很明显地看出,部分字段的内容其实是重复的,但每一条用例都必须要包含,故需要引入常量的概念,通过对字段设置一次内容,使其在每次执行时会自动将字段的内容填写至测试用例中。当然,通过该方法设置的字段值并非真正意义上的常量,其值是可以改变的,可根据需要,实时改变字段相应的值。调用的方法为:
```
setFieldValue(String field, String content)
```
其方法第一个参数为需要写入的字段名,第二个参数为需要在该字段中写入的内容,需要注意的是,字段内容参数不是可变参数,只能传入一个值,需要自行换行。
于是,在上一节中,我们编写的代码则可以改为(由于代码过长,故省略掉添加身份证测试用例的代码,以方便查看):
```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);
//添加常量词语
wtc.setFieldValue("模块", "/测试项目/账号管理/创建账号");
wtc.setFieldValue("目的", "验证创建账号界面各个控件输入是否有效");
wtc.setFieldValue("状态", "1");
wtc.setFieldValue("设计者", "test");
wtc.setFieldValue("关联需求", "TEST-1");
}
@AfterClass
public void openFolder() throws IOException {
//将测试用例内容写入到文件中
wtc.writeFile();
}
@Test
public void addCase() {
//添加姓名相关的用例
wtc.addContent("标题", "通过不同的姓名创建账号")
.addContent("前置条件",
"已在创建账号界面",
"除姓名字段外,其他信息均正确填写"
)
.addContent("步骤",
"“姓名”文本框不输入任何信息,点击“保存”按钮",
"在“姓名”文本框中只输入空格,点击“保存”按钮",
"在“姓名”文本框中输入HTML代码点击“保存”按钮"
)
.addContent("预期",
"账号创建成功",
"账号创建成功",
"账号创建成功且HTML代码不会被转义"
)
.addContent("优先级", "2")
.addContent("关键用例", "2")
.end();
}
```
##### 1.2.4 添加词语替换
#### 1.3 测试用例模板
##### 1.3.1 测试用例模板使用
##### 1.3.2 测试用例模板扩展
@ -289,4 +441,4 @@ public void createTemplet() throws DocumentException, IOException {
#### 1.5 测试用例模板扩展
##### 1.5.1 测试用例字段xml文件的编写
##### 1.5.2 测试用例模板类基类的继承
##### 1.5.3 测试用例模板类字段枚举(可选)
##### 1.5.3 测试用例模板类字段枚举(可选)

View File

@ -171,6 +171,7 @@ public abstract class AbstractTestCaseWrite<T extends AbstractTestCaseWrite<T>>
*/
public void setFieldValue(String field, String content) {
// 为保证在写用例的时候也能生效故将值设置进入fieldMap
//TODO 存在BUG,有待观察后期再添加字段允许传入多个方法
addContent(field, content);
// 先将值设置入fieldMap中可以保证field字段是存在于fieldMap中以减少此处再做判断

View File

@ -28,22 +28,32 @@ public class TestWriteCase {
@BeforeClass
public void createTemplet() throws DocumentException, IOException {
//创建测试用例模板文件
CreateCaseFile temp = new CreateCaseFile(conFile, tempFile);
temp.setCoverFile(true);
temp.create();
//构造用例编写类对象
wtc = new BasicTestCaseWrite(conFile, tempFile);
//添加常量词语
wtc.setFieldValue("模块", "/测试项目/账号管理/创建账号");
wtc.setFieldValue("目的", "验证创建账号界面各个控件输入是否有效");
wtc.setFieldValue("状态", "1");
wtc.setFieldValue("设计者", "test");
wtc.setFieldValue("关联需求", "TEST-1");
}
@AfterClass
public void openFolder() throws IOException {
//将测试用例内容写入到文件中
wtc.writeFile();
}
@Test
public void addCase() {
//添加姓名相关的用例
wtc.addContent("标题", "通过不同的姓名创建账号")
.addContent("目的", "验证创建账号界面各个控件输入是否有效")
.addContent("前置条件",
"已在创建账号界面",
"除姓名字段外,其他信息均正确填写"
@ -58,15 +68,11 @@ public class TestWriteCase {
"账号创建成功",
"账号创建成功且HTML代码不会被转义"
)
.addContent("模块", "/测试项目/账号管理/创建账号")
.addContent("状态", "1")
.addContent("优先级", "2")
.addContent("项目", "")
.addContent("设计者", "test")
.addContent("关键用例", "2")
.addContent("关联需求", "TEST-1")
.end();
//添加身份证相关的用例
wtc.addContent("标题", "通过不同的身份证创建账号")
.addContent("目的", "验证创建账号界面各个控件输入是否有效")
.addContent("前置条件",
@ -97,13 +103,8 @@ public class TestWriteCase {
"账号创建失败,并给出相应的提示",
"账号创建失败,并给出相应的提示"
)
.addContent("模块", "/测试项目/账号管理/创建账号")
.addContent("状态", "1")
.addContent("优先级", "1")
.addContent("项目", "")
.addContent("设计者", "test")
.addContent("关键用例", "1")
.addContent("关联需求", "TEST-1")
.end();
}
}