从 0 到 1 搭建 SuperTest 接口自动化测试项目

下面会从 0 到 1 搭建一个 SuperTest 接口自动化测试项目,会使用 Jest 或 Mocha 作为测试框架进行 demo 演示。

Mocha 版本

可参考 demo 项目:https://github.com/Automation-Test-Starter/SuperTest-Mocha-demo

新建项目文件夹

mkdir SuperTest-Mocha-demo

项目初始化

// 进入项目文件夹下
cd SuperTest-Mocha-demo
// nodejs 项目初始化
npm init -y

安装依赖

// 安装 supertest
npm install supertest --save-dev
// 安装 mocha测试框架
npm install mocha --save-dev
// 安装 chai断言库
npm install chai --save-dev

新建测试文件及测试用例

// 新建测试文件夹
mkdir Specs
// 新建测试用例文件
cd Specs
touch test.spec.js

编写测试用例

测试接口可参考项目中 demoAPI.md 文件

// Test: test.spec.js
const request = require('supertest'); // import supertest
const chai = require('chai'); // import chai
const expect = require('chai').expect; // import expect

// Test Suite
describe('Verify that the Get and POST API returns correctly', function(){
        // Test case 1
        it('Verify that the GET API returns correctly', function(done){
            request('https://jsonplaceholder.typicode.com') // Test endpoint
                .get('/posts/1') // API endpoint
                .expect(200) // expected response status code
                .expect(function (res) {
                    expect(res.body.id).to.equal(1  )
                    expect(res.body.userId).to.equal(1)
                    expect(res.body.title).to.equal("sunt aut facere repellat provident occaecati excepturi optio reprehenderit")
                    expect(res.body.body).
                    to.equal("quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto")
                }) // expected response body
                .end(done) // end the test case

        });
        // Test case 2
        it('Verify that the POST API returns correctly', function(done){
            request('https://jsonplaceholder.typicode.com') // Test endpoint
                .post('/posts') // API endpoint
                .send({
                    "title": "foo",
                    "body": "bar",
                    "userId": 1
                }) // request body
                .expect(201) // expected response status code
                .expect(function (res) {
                    expect(res.body.id).to.equal(101  )
                    expect(res.body.userId).to.equal(1)
                    expect(res.body.title).to.equal("foo")
                    expect(res.body.body).to.equal("bar")
                }) // expected response body
                .end(done) // end the test case
        });
});

配置 mocha 配置文件

  • 新建配置文件
// 项目根目录下新建配置文件
touch .mocharc.js
  • 更新配置文件
// mocha config
module.exports = {
    timeout: 5000, // 设置测试用例的默认超时时间(毫秒)
    spec: ['Specs/**/*.js'], // 指定测试文件的位置
};

调整测试脚本

在 package.json 文件中添加测试脚本

"scripts": {
    "test": "mocha"
  },

运行测试用例

// 运行测试用例
npm run test

测试报告

命令行测试报告

RbdVs7

集成 mochawesome 测试报告
  • 安装 mochawesome
npm install --save-dev mochawesome
  • 更新 mocha 配置文件

可参考 demo 项目:https://github.com/Automation-Test-Starter/SuperTest-Mocha-demo

// mocha config
module.exports = {
    timeout: 5000, // 设置测试用例的默认超时时间(毫秒)
    reporter: 'mochawesome', // 使用 mochawesome 报告生成器
    'reporter-option': [
        'reportDir=Report', // 报告生成路径
        'reportFilename=[status]_[datetime]-[name]-report', //报告名称
        'html=true', // 生成 html 格式报告
        'json=false', // 不生成 json 格式报告
        'overwrite=false', // 不覆盖已经存在的报告
        'timestamp=longDate', // 给报告添加时间戳

    ], // 传递给报告生成器的参数
    spec: ['Specs/**/*.js'], // 指定测试文件的位置
};
  • 运行测试用例
// 运行测试用例
npm run test
  • 查看测试报告

测试报告文件夹:Report,点击使用浏览器打开最新 html 报告文件

BseOQ8

Jest 版本

可参考 demo 项目:https://github.com/Automation-Test-Starter/SuperTest-Jest-demo

新建 Jest demo 项目文件夹

mkdir SuperTest-Jest-demo

Jest demo 项目初始化

// 进入项目文件夹下
cd SuperTest-Mocha-demo
// nodejs 项目初始化
npm init -y

Jest demo 安装依赖

// 安装 supertest
npm install supertest --save-dev
// 安装 Jest测试框架
npm install jest --save-dev

新建 Jest demo 项目的测试文件及测试用例

// 新建测试文件夹
mkdir Specs
// 新建测试用例文件
cd Specs
touch test.spec.js

编写 Jest demo 测试用例

测试接口可参考项目中 demoAPI.md 文件

const request = require('supertest');

// Test Suite
describe('Verify that the Get and POST API returns correctly', () => {
    // Test case 1
    it('Verify that the GET API returns correctly', async () => {
        const res = await request('https://jsonplaceholder.typicode.com') // Test endpoint
            .get('/posts/1') // API endpoint
            .send() // request body
            .expect(200); // use supertest's expect to verify that the status code is 200
        // user jest's expect to verify the response body
        expect(res.status).toBe(200); // Verify that the status code is 200
        expect(res.body.id).toEqual(1); // Verify that the id is 1
        expect(res.body.userId).toEqual(1); // Verify that the userId is 1
        expect(res.body.title)
        .toEqual("sunt aut facere repellat provident occaecati excepturi optio reprehenderit");
        expect(res.body.body)
        .toEqual("quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto");
    });

    // Test case 2
    it('Verify that the POST API returns correctly', async() =>{
        const res = await request('https://jsonplaceholder.typicode.com') // Test endpoint
            .post('/posts') // API endpoint
            .send({
                "title": "foo",
                "body": "bar",
                "userId": 1
            }) // request body
            .expect(201); // use supertest's expect to verify that the status code is 201
        // user jest's expect to verify the response body
        expect(res.statusCode).toBe(201);
        expect(res.body.id).toEqual(101);
        expect(res.body.userId).toEqual(1);
        expect(res.body.title).toEqual("foo");
        expect(res.body.body).toEqual("bar");
    });
}); 

配置 Jest 配置文件

  • 新建配置文件
// 项目根目录下新建配置文件
touch jest.config.js
  • 更新配置文件
// Desc: Jest configuration file
module.exports = {
    // 测试文件的匹配规则
    testMatch: ['**/Specs/*.spec.js'],
};

调整 Jest 测试脚本

在 package.json 文件中添加测试脚本

"scripts": {
    "test": "jest"
  },

运行 Jest 测试用例

// 运行测试用例
npm run test

Jest 测试报告

Jest 命令行测试报告

ItJf6N

集成 jest-html-reporters 测试报告
  • 安装 jest-html-reporters
npm install --save-dev jest-html-reporters
  • 更新 Jest 配置文件

可参考 demo 项目:https://github.com/Automation-Test-Starter/SuperTest-Jest-demo

// Desc: Jest configuration file
module.exports = {
    // 测试文件的匹配规则
    testMatch: ['**/Specs/*.spec.js'],
    // 测试报告生成器
    reporters: [
        'default',
        [
            'jest-html-reporters',
            {
                publicPath: './Report', // 报告生成路径
                filename: 'report.html', // 报告名称
                pageTitle: 'SuperTest and Jest API Test Report', // 报告标题
                overwrite: true, // 报告文件是否覆盖
                expand: true, // 展开所有测试套件
            },
        ],
    ],
};
  • 运行 Jest 测试用例
// 运行测试用例
npm run test
  • 查看测试报告

测试报告文件夹:Report,点击使用浏览器打开最新 html 报告文件

12ZreT


欢迎关注软件测试同学的公众号“软件测试同学”,原创 QA 技术文章第一时间推送。