返回
接口测试平台代码实现40:修改bug
开发工具
2023-09-07 01:29:05
修改bug
我们的这个系列已经进行了长达12章成品预览和40章纯开发章节,但是基本还没做过完全一点的测试修复bug章节,每次新开发的功能也仅仅停留在单元/函数层面上的自测。
经过了最近几十名小伙伴的反馈(反复体会反馈的小伙伴们,值得鼓励),我意识到:可能会有很多小伙伴跟我差不多,就是根本不知道如何进行测试。
事实上,这个领域之前确实比较小众,很多人都是一路摸索着走过来的,并没有很多专业方法指导,甚至是系统性的培训,所以我决定专门写一章来进行讲解,希望能让后来的小伙伴们在学习这条路上少走一些弯路。
因为这个测试,在我看来,简单来讲,就是一个对接口进行尝试访问的自动化过程,也就是脱离人的这个步骤,从而进行重复地、自动地访问接口,这个是测试的一个核心思想。
我的测试案例准备也非常简单,我的思维逻辑是:先把测试用例设计好,然后把测试用例转成测试脚本,最后运行脚本,对比一下预期结果和实际结果,看是否一致。
测试用例就是进行接口的访问,包括:
- 访问路径
- 请求参数
- 请求方法
- 请求头
- 期望返回结果
- 状态码
我写了几条测试用例,放在test_demo这个测试类里,示例如下:
@Test
public void test_demo_post() {
final String demoUrl = "http://localhost:8080/test/demo";
final String demoRequestParam = "{\n" +
" \"key1\": \"value1\"\n" +
"}";
final String demoResponse = "{\n" +
" \"message\": \"ok\"\n" +
"}";
execute_test(demoUrl, demoRequestParam, demoResponse, "post", HttpURLConnection.HTTP_OK);
}
@Test
public void test_demo_get() {
final String demoUrl = "http://localhost:8080/test/demo?key1=value1";
final String demoResponse = "{\n" +
" \"message\": \"ok\"\n" +
"}";
execute_test(demoUrl, null, demoResponse, "get", HttpURLConnection.HTTP_OK);
}
private void execute_test(String demoUrl, String demoRequestParam, String demoResponse, String demoMethod, int demoStatusCode) {
HttpURLConnection conn = null;
try {
URL url = new URL(demoUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(2000);
conn.setRequestMethod(demoMethod);
if (demoRequestParam != null) {
OutputStream os = conn.getOutputStream();
os.write(demoRequestParam.getBytes());
os.flush();
os.close();
}
conn.connect();
assertEquals(conn.getResponseCode(), demoStatusCode);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String result = "";
String line;
while ((line = br.readLine()) != null) {
result += line;
}
assertEquals(result, demoResponse);
br.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
测试脚本,就是运行这个测试类。
mvn test
运行结果如下:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.xxxx.module.demo.TestDemo
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
看到这个结果,心里感觉非常好。
自动化测试之问题解决
我们在使用自动化测试工具进行接口自动化测试的时候,经常会遇到一些问题,比如:
- 测试脚本运行失败
- 测试结果不准确
- 测试用例覆盖率低
- 测试环境不稳定
- 测试数据不完整
针对这些问题,我们可以采用以下方法进行解决:
- 测试脚本运行失败 :
- 检查测试脚本的语法和逻辑是否正确
- 检查测试环境是否正确配置
- 检查测试数据是否正确
- 测试结果不准确 :
- 检查测试脚本是否正确实现了测试用例
- 检查测试环境是否正确配置
- 检查测试数据是否正确
- 测试用例覆盖率低 :
- 增加更多的测试用例
- 采用覆盖率分析工具来找出没有覆盖到的代码
- 测试环境不稳定 :
- 使用虚拟机或容器来隔离测试环境
- 使用持续集成工具来确保测试环境的一致性
- 测试数据不完整 :
- 使用数据生成工具来生成测试数据
- 使用数据库备份工具来备份测试数据