2022 新年钟声的敲响有没有让开发小哥哥、测试小姐姐们心头一紧?马上过年了,2021 年的项目还一堆功能和 bug 没搞完,真令人头秃……
小编干了小十年开发,每到项目交付前,再美的测试小姐姐我每天也不想见到她。因为大多数团队每次为了赶进度,在一期工程基本一屁股技术债 ——
单元测试是不可能写的,这辈子都不会写单元测试;集成测试更不要想,只能靠测试小姐姐点点点这样维持一点质量……
而且俗话说得好:
码农三大懒 —— 变量命名、注释/文档、测试代码
辣这年前上线啷个弄嘛?
…… 也不是不可以抢救一下~
知识精讲
Web
DOM 模拟库
- JSDOM:稳健老前辈
- HappyDOM:轻快新后生
浏览器操作库
- Selenium 开天辟地:ThoughtWorks
- Puppeteer 改天换地:Google
- Playwright 另起炉灶:Microsoft
录制器(偷懒神器)
测试小姐姐一边点点点,测试代码自动录制出来,*代码小白的黑盒测试专员立马转职会玩代码的白盒测试工程师*,过年回家又可以吊打亲戚家孩子了~😜
运行器/套件
- Jest:使用广泛
- Codecept:封装全面(偷懒神器)
- 中国技术宅小时候不少都玩过易语言中文编程,那用各国语言写测试代码你玩过吗?这又是一个测试小姐姐不可错过的升职加薪、吊打凤凰男/普信男的绝佳机会~
Feature("CodeceptJS 演示");
Scenario("成功提交表单", ({ 我 }) => {
我.在页面("/documentation");
我.填写字段("电邮", "[email protected]");
我.填写字段("密码", "123456");
我.勾选选项("激活");
我.勾选选项("男");
我.单击("创建用户");
我.看到("用户名可用");
我.在当前网址中看不到("/documentation");
});
小程序
微信开发者工具内置操作脚本录制器,也开发了类似浏览器操作库的 API,结合 Web 前端已有的测试框架,小程序这么中国特色的玩意儿也能做自动化测试啦~
后端
- APIJSON:智能测试框架
- 腾讯工程师基于机器学习开发的自动化 API、UI 测试框架
- 开源中国 GVP 获奖项目
- Apifox = Postman + Swagger + Mock + JMeter
- 国内 API as a Service 创业厂商
两种自动化测试模型
测试金字塔
测试冠军杯
动手实践
课前预习,课上带电脑!
实操案例:Next.js + Jest
—— 来自脚手架 @idea2app/Next-Bootstrap-ts
安装
npm i -D jest playwright jest-playwright-preset \
@jest/types ts-node @types/jest ts-jest
npx playwright install
tsconfig.json
{
"compilerOptions": {
"types": ["@types/jest", "jest-playwright-preset"]
}
}
jest.config.ts
import type { value Config } from "@jest/types";
const config: Config.InitialOptions = {
preset: "jest-playwright-preset",
transform: {
"^.+\\.ts$": "ts-jest"
},
testTimeout: 60000 // 根据后端网速调节
};
export default config;
jest-playwright.config.js
module.exports = {
browsers: ["chromium", "firefox", "webkit"],
launchOptions: {
headless: false // 仅本机测试
},
serverOptions: {
command: "npm run dev",
port: 3000,
debug: true // 仅本机测试
}
};
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Jest",
"type": "node",
"request": "launch",
"port": 9229,
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/jest/bin/jest.js",
"--runInBand"
]
}
]
}
test/home.spec.ts
describe("Home page", () => {
beforeAll(() =>
page.goto("http://localhost:3000", {
timeout: 60000 // 根据后端网速调节
})
);
it("should load Main framework", async () => {
expect(await page.title()).toBe("Home page");
});
});
export {};
活动概况
- 受众:
- Web 前后端工程师
- 测试专员、工程师
- 项目经理
- 费用:¥ 0.00