端到端或集成或系统测试

end to end or integration or system testing

这是什么测试?以下是端到端测试还是集成测试或系统测试?如果不是,您可以在代码示例的上下文中详细说明测试类型。

我基本上是在本地主机上调用端点并在 status/output 上断言。

let assert = require("assert");
let http = require("http");

describe("EndToEndTesting", function() {

    describe("GET /users", function() {
        it("should return list of users", function(done) {
            http.request({
                method: "GET",
                hostname: "localhost",
                port: 3000,
                path: "/users"
            }, function(response){
                let buffers = [];
                response.on("data", buffers.push.bind(buffers));
                response.on("end", function(){
                    let body = JSON.parse(Buffer.concat(buffers).toString());
                    assert(response.statusCode == 200);
                });
            }).on("error", console.error).end();
        });
    }
}

有趣的问题,不幸的是答案可能取决于很多因素。

让我们从几个定义开始:

  1. End to End testing 正在从头到尾测试应用程序。 IE。期望用户执行的完整流程。
  2. Integration testing 正在将一组组件作为一个项目进行测试。
  3. System testing 正在根据要求测试整个系统。

因此,第一个要考虑的问题是,此测试是否检查了用户期望实现的完整流程?

这确实意味着您需要定义用户是谁。例如,如果您正在构建一个 API 然后由其他开发人员重新使用,您的用户作为 api 的作者将不同于集成您的 api 的解决方案的最终用户.

我最好的猜测是这不是端到端测试。查看测试,这是一个获取用户列表的网络请求。如果您正在构建一个可以列出机密信息的 Web UI,我希望这要求访问该列表的人登录。因此,端到端测试将包括登录系统。

那么,下一个问题,正在测试哪些组件?很难从测试代码中分辨出来,但我猜数据存储在数据库中的某个地方。所以是的,这是一个集成测试,因为它检查 Web 组件和数据库之间的交互。

最后,这是不是系统测试。可能是的,因为我看不到任何证据表明这不是 运行 反对整个系统。此外,假设您的解决方案要求能够列出用户,那么它正在测试所需的功能。

因此,在这种情况下,我认为它可能是系统测试或集成测试。不幸的是,根据这些测试类型的定义,通常存在重叠,测试可以归类为其中任何一种。因此,最终取决于您将其称为系统测试还是集成测试。