部署好TestNG之后我们就来做第一个测试实例。
首先我们新建个工具类包,包名随意、类名随意。

如图是我的工具类
第一个工具类定义了最基本的POST和GET请求,然后处理返回值
代码如下
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class PostGet {
/**
* 处理get请求.
* @param url 请求路径
* @return json
*/
public String get(String url){
//实例化httpclient
CloseableHttpClient httpclient = HttpClients.createDefault();
//实例化get方法
HttpGet httpget = new HttpGet(url);
//请求结果
CloseableHttpResponse response = null;
String content ="";
try {
//执行get方法
response = httpclient.execute(httpget);
if(response.getStatusLine().getStatusCode()==200){
content = EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(content);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
/**
* 处理post请求.
* @param url 请求路径
* @param params 参数
* @return json
*/
public String post(String url,Map<String, String> Params,Map<String, String> Header){
//实例化httpClient
CloseableHttpClient httpclient = HttpClients.createDefault();
//实例化post方法
HttpPost httpPost = new HttpPost(url);
//添加请求头部
Set<String> Heads=Header.keySet();
for(String head : Heads) {
httpPost.addHeader(head, Header.get(head));
}
//处理参数
List<NameValuePair> nvps = new ArrayList <NameValuePair>();
Set<String> keySet = Params.keySet();
for(String key : keySet) {
nvps.add(new BasicNameValuePair(key, Params.get(key)));
}
//结果
CloseableHttpResponse response = null;
String content="";
try {
//提交的参数
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nvps, "UTF-8");
//将参数给post方法
httpPost.setEntity(uefEntity);
//执行post方法
response = httpclient.execute(httpPost);
if(response.getStatusLine().getStatusCode()==200){
content = EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(content);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
}
第二个工具类是自己定义的不同的测试环境,因为一般公司会部署至少三个环境,包括内网(本地测试环境)、UAT(线上测试环境)、正式环境(生产环境)。所以在这个类里面分别封装了未来遇到的不同的环境的URL,当然这个工具类比较开放,你也可以根据自己的逻辑思维去做自己喜欢的工具类,只要优化你的体验就行。
import java.util.HashMap;
import java.util.Map;
public class Urltool {
// 本地环境请求方法
public void TestLocalhostPost(String url,Map<String, String> map) {
PostGet pg=new PostGet();
pg.post("http://localhost:8080/flycjava/"+url,map);
}
public void TestLocalhostGet(String url) {
PostGet pg=new PostGet();
pg.get("http://localhost:8080/flycjava/"+url);
}
// 本地环境请求方法
public void Test94Post(String url,Map<String, String> map) {
PostGet pg=new PostGet();
pg.post("http://192.168.1.94:8080/flycjava/"+url,map);
}
public void Test94Get(String url) {
PostGet pg=new PostGet();
pg.get("http://192.168.1.94:8080/flycjava/"+url);
}
// uta环境请求方法
public void TestUTAPost(String url,Map<String, String> map) {
PostGet pg=new PostGet();
pg.post("http://www.baidutest.com/"+url,map);
}
public void TestUTAGet(String url) {
PostGet pg=new PostGet();
pg.get("http://www.baidutest.com/"+url);
}
// 外网环境请求方法
public void TestPNWPost(String url,Map<String, String> map) {
PostGet pg=new PostGet();
pg.post("http://www。baidu.com/"+url,map);
}
public void TestPNWGet(String url) {
PostGet pg=new PostGet();
pg.get("http://www。baidu.com/"+url);
}
}
接下来就是编写测试类,这里面我举例用的是错误参数的请求,一般情况下会定义如:正确的文档参数,错误的文档参数,缺少文档必填参数,没有参数,错误参数,其他参数等多组数据进行测试。
import java.util.HashMap;
import java.util.Map;
import org.testng.annotations.Test;
import com.test.tool.Urltool;
public class insertTest{
// 使用TestNG注解
@Test
public void TestPost() {
System.out.println("错误参数的post请求");
// 实例化工具类
Urltool ut=new Urltool();
Map<String,String> map = new HashMap();
// 定义参数
map.put("cId","408");
// 发送请求
ut.TestUTAPost("about/abouttable/insert", map);
}
}
接下来就是跑一下这个测试脚本

如图,选择运行TestNG Test

如图,你可以检查你的返回值,是否符合文档要求,接下来访问数据库,对比返回值中的数据库参数是否符合匹配,数据不匹配或者不符合文档要求的全部打回给接口开发重新开发并记录bug等待后期回归测试。
当然,依托于TestNG的特性,我们可以通过test-output文件夹下HTML文件很直观的看到接口的性能,是否通过测试等信息。
当然这里由于只是单元测试,这个优点不明显,但是当你面对一堆接口走流程测试的时候,这个功能十分方便。


网友评论