运用JMETER对XML数据源与数据库中数据进行对比
前言:
做接口测试总需要人为的对比数据库与源文件是否正确落库,但是数据量大的情况下怎么办,还用肉眼看的话容易看不全面导致出错。
虽然这是测试的一项,但是每当你频繁的去做一件事的时候就要考虑如何去减少重复工作提高效率了。
Xml中的数据通过调用开发同事给的接口存入数据库中,但是在通过接口代码的处理后是否会正确的落表呢?如何高效测试呢?思考????
思路:
工具 JMETER 编程语言:java 编码工具:idea
技能:熟悉java,熟悉jmeter的beanshell脚本语言。熟练理解jmeter中数据的存储格式和调用方式
操作步骤:
- 运用java编写解析xml文件的工具类;
- 将工具类以jar包的方式引入jmeter;
- 运用jmeter编写脚本,把获取到的xml数据封装到全局变量中;
- 运用jmeter获取数据库连接,并查询出需要对比的数据;
- 通过数据库的响应断言或bealshell断言进行比较数据是否一致;
实际的操作:
第一章
1.0.0.编写工具类——》
对java编码语言不熟悉可跳过,看下面怎么操作jmeter就可以了。
解析xml文件获取其中的内容。
Java本身已经给了如何获取xml的api,所以我们只要引入对应的jar包,调用它给的方法就可以了;
1.0.1创建maven项目
用idea创建一个maven项目file——》new project——》maven
1.0.2导入pom配置文件jar
打开pom文件引入操作xml的jar:
实际代码:
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
1.0.3.编写工具类
新建class编写解析xml的java代码
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//解析person.xml中student数据,持久化到Student对象中
public class StudentForXml {
public static List<Student> getStudengXml(String path ,String tagName) throws DocumentException {
List<Student> list=new ArrayList<>();
//读取xml,封装对象
SAXReader saxReader =new SAXReader();
Document doc=saxReader.read(new File("C:\\Users\\Lenovo\\Desktop\\student.xml"));
//读取Iterator标签
Iterator<Element> it=doc.getRootElement().elementIterator("student");
while(it.hasNext()){
Element elem=it.next();
Student student=new Student();
//读取属性里的内容
student.setId(elem.attributeValue("id")); //读取属性
student.setNAME(elem.elementText("name")); //读取文本
student.setAGE(elem.elementText("age"));
student.setS(elem.elementText("S"));
list.add(student);
}
for(Student student : list){
String name = student.getNAME();
String age = student.getAGE();
age.equals("");
String s = student.getS();
System.out.println(student.toString());
System.out.println("姓名:"+name+" ; "+"年龄:"+age+" ; "+"学号:"+s+" ; ");
}
return list;
}
}
以上代码是我认为最实用简单的一个代码,有一些代码功底的都能看得懂。同时我也编写了其他的一种解析xml文件内容的代码,但是比较冗余不再展示:
获取到xml数据后需要存储到一个对象中,所以需要新建一个对象,进行存储,特别注意的是该对象必须与数据库中的对应的表中的字段一致!
新建Student对象私有字段提高安全性,给出get,set方法可以修改:
public class Student {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNAME() {
return NAME;
}
public void setNAME(String NAME) {
this.NAME = NAME;
}
public String getAGE() {
return AGE;
}
public void setAGE(String AGE) {
this.AGE = AGE;
}
public Student() {
}
public String getSEX() {
return SEX;
}
public void setSEX(String SEX) {
this.SEX = SEX;
}
public String getS() {
return S;
}
public void setS(String s) {
S = s;
}
private String NAME;
private String AGE;
private String SEX;
private String S;
}
1.0.4.打jar包
编写好工具类后开始打jar包file——》project structure——》进入页面后选择
第二章
2.0.1.操作jmeter
把打好的jar放入jmeter的D:\jmeter\apache-jmeter-5.1.1\lib\ext目录下
2.0.2.引入jar包,其实不必写入jmeter会自动读取lib下的jar:
2.0.3.配置数据连接
2.0.4.编写beanshell脚本
把从java工具类解析到的xml数据封装成全局变量供下面jdbc使用。
已编写好的代码可复制:
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import ext.newjar.Student;
String path ="C:\\Users\\Lenovo\\Desktop\\student.xml";
String tagName = "student";
Student s =new Student();
try {
List list= StudentForXml.getStudengXml(path,tagName);
for(int i = 0 ; i < list.size() ; i++) {
s =list.get(i);
String name = s.getNAME();
String age = s.getAGE();
String s = s.getS();
vars.put(i+"NAME",name);
vars.put(i+"age",age);
vars.put(i+"s",s);
}
} catch (DocumentException e) {
e.printStackTrace();
}
2.0.5.获取数据字段
设定要获取的数据字段以便进行对比;
2.0.6.新建断言数据对比
新建数据响应断言,对比从xml中设置的全局变量是否与数据库中的相同:
方法一:
直接加响应断言,比较使用快捷不需要编码能力。
方法二
运用beanshell脚本进行对比:方便调试代码是否正确,快速定位问题。
这个本身多余不再贴代码:
2.0.7运行脚本查看结果树:
作者:张天星
转载请注明出处