返回

接口测试平台代码实现40:修改bug

开发工具

修改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

看到这个结果,心里感觉非常好。

自动化测试之问题解决

我们在使用自动化测试工具进行接口自动化测试的时候,经常会遇到一些问题,比如:

  • 测试脚本运行失败
  • 测试结果不准确
  • 测试用例覆盖率低
  • 测试环境不稳定
  • 测试数据不完整

针对这些问题,我们可以采用以下方法进行解决:

  • 测试脚本运行失败
    • 检查测试脚本的语法和逻辑是否正确
    • 检查测试环境是否正确配置
    • 检查测试数据是否正确
  • 测试结果不准确
    • 检查测试脚本是否正确实现了测试用例
    • 检查测试环境是否正确配置
    • 检查测试数据是否正确
  • 测试用例覆盖率低
    • 增加更多的测试用例
    • 采用覆盖率分析工具来找出没有覆盖到的代码
  • 测试环境不稳定
    • 使用虚拟机或容器来隔离测试环境
    • 使用持续集成工具来确保测试环境的一致性
  • 测试数据不完整
    • 使用数据生成工具来生成测试数据
    • 使用数据库备份工具来备份测试数据