添加readme内容
This commit is contained in:
parent
4446476b9f
commit
673c93f5c6
164
README.md
164
README.md
|
@ -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 测试用例模板类字段枚举(可选)
|
|
@ -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中,以减少此处再做判断
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue