Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e957937

Browse files
author
huyao.cloud
committedAug 24, 2020
Cypress 测试笔记
1 parent e85999e commit e957937

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
 

‎质量保障/测试/cypress.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,76 @@
11
# cypress 笔记
22

3+
cypress 是通过模拟用户点击来测试的端到端测试框架,它也允许你编写集成测试与单元测试。
4+
35
[cypress - 中文文档](https://docs.cypress.io/zh-cn/guides/overview/why-cypress.html#)
46

7+
### Cypress 为什么好?
8+
9+
- 真实模拟用户点点点,可靠高效
10+
- 免去开发完成后大量手动去检查的行为,即原本代价很高的 UI 测试。
11+
- 易发现因修改而造成的其他模块 BUG
12+
- 开发人员开发某个功能,对自己模块的需求多数情况都是完成的不错的,但有时候因为改 A 模块而导致但 B 模块的 BUG 难以用单测发现
13+
- 整个流程拉通,甚至能及时发现后端 BUG
14+
- 调用真实后端接口,如果原本正常然后突然跑不通,就是后端问题
15+
- 查错方便
16+
- Cypress 支持录制视频与截图,跑挂了有截图还有当时的报错信息
17+
- 最低成本保证主流程
18+
- Cypress 属于黑盒测试,Cypress 模拟用户从头到尾使用网站的流程。能最简单又快速的避免那种页面都挂了但还不知道的情况,也是最惨情况。
19+
20+
## 经验
21+
22+
### 隔离环境测试
23+
24+
Cypress 是用的真正的后端数据,而不是 mock 一个数据然后测试组件行为。所以在测试时最好不要使用线上环境,这会使得后端写入很多测试脏数据。最好的就是在专门的沙箱环境测试,如果有租户概念可用新租户,测试时机为发起 MR 代码时。
25+
26+
### Cypress 不适合边界测试、细节测试
27+
28+
Cypress 主要用于跑通主流程,测试的是预期内的东西,而对于有大量计算或复杂判断的纯函数方法而言,单测肯定是更好。
29+
30+
### 对于多分支流程的测试
31+
32+
有的网站的功能之间耦合的、有先后顺序、有分支顺序的。对于多个流程,需要想好系统有几个主流程,有几个分支。以发布文章举例,就有 :
33+
34+
- 最简单的发布到点赞评论到最后删除
35+
- 系统发现发布内容有敏感词
36+
- 系统判断不通过
37+
- 审核
38+
- 然后审核通过
39+
- 然后审核不通过
40+
41+
做法:
42+
43+
- 用讲故事的方法串起整个测试
44+
- 至少描述多个流程,描述在各阶段哪些用户做了哪些操作,填了哪些数据。
45+
- 在最后执行测试时,按照故事线来测试,而不是按照模块来测试。
46+
47+
注意点:
48+
49+
- 故事数据的抽象
50+
- 每个故事的数据都抽离到一个单独且唯一的目录下,使得 数据与测试行为分离。
51+
- 测试数据与用例分离
52+
- 测试用例都通过函数方式调用,清晰可配置
53+
54+
## 技巧
55+
56+
### 写健壮的测试
57+
58+
Cypress 测试存在编写测试用例时通过,但之后测试偶发不通过的情况。为了提升稳定性,可从这几个方面来着手:
59+
60+
- wait 等待时间
61+
- Cypress 等待某个 DOM 出现默认是 4s,但可设置最大的超时时间
62+
- 如果依赖接口,最好是主动等待接口数据返回时机,而不是固定的写几秒
63+
- 重试
64+
- 有时后端接口不稳定,或有其他原因,可为测试用例添加几次重试
65+
- `Cypress.currentTest.retries(重试次数)`
66+
- 重试之后才跑通其实是有一些不好的,可考虑加个主动上报逻辑
67+
- 选择器
68+
- 通过文字选 DOM
69+
- 确定这个文案不经常变化
70+
- 通过 DOM 结构选择
71+
- 确认各情况这个 DOM 接口都能取到
72+
- 有的选择器确实能选中,但点击之后不触发响应,需要传递`{force: true}`
73+
574
### setCookie
675

776
`setCookie`会在每个`it`之后自动销毁,保证纯洁性,所以需要修改整个`describe``cookie`需要在`beforeEach`中使用。参考:https://docs.cypress.io/api/commands/clearcookies.html#Syntax

0 commit comments

Comments
 (0)
Failed to load comments.