在測(cè)試某個(gè)功能前遥皂,需要準(zhǔn)備測(cè)試數(shù)據(jù)是不可或缺的步驟比默,最原始準(zhǔn)備測(cè)試數(shù)據(jù)基于GUI操作生成測(cè)試數(shù)據(jù)恬总,哪還有其他方式準(zhǔn)備測(cè)試數(shù)據(jù)嗎?現(xiàn)在很多WEB和APP應(yīng)用使用前后端分離方式宏所,前端獲取服務(wù)端數(shù)據(jù)通過(guò)調(diào)用APP接口方式,我們也可以通過(guò)調(diào)用API接口生成測(cè)試數(shù)據(jù)摊溶,把準(zhǔn)備數(shù)據(jù)服務(wù)作為一個(gè)小小終端爬骤。
我們都知道數(shù)據(jù)是存儲(chǔ)在數(shù)據(jù)庫(kù)中,我們也可以通過(guò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行CURD操作生成測(cè)試數(shù)據(jù)莫换。另外調(diào)用API接口生成數(shù)據(jù)霞玄,可能造成部分?jǐn)?shù)據(jù)不夠齊全骤铃,這時(shí)候使用數(shù)據(jù)庫(kù)操作補(bǔ)全數(shù)據(jù)。
總結(jié)坷剧,準(zhǔn)備測(cè)試數(shù)據(jù)有四個(gè)方法:
- 基于GUI操作生成測(cè)試數(shù)據(jù)惰爬。
- 通過(guò)API調(diào)用生成測(cè)試數(shù)據(jù)。
- 通過(guò)數(shù)據(jù)庫(kù)操作生成測(cè)試數(shù)據(jù)惫企。
- 綜合運(yùn)用API和數(shù)據(jù)庫(kù)方式生成測(cè)試數(shù)據(jù)撕瞧。
接下來(lái)粗略談?wù)勥@四種實(shí)現(xiàn)方式:
基于GUI操作生成測(cè)試數(shù)據(jù)
基于GUI操作生成測(cè)試數(shù)據(jù),是最原始創(chuàng)建測(cè)試數(shù)據(jù)方法狞尔。測(cè)試員采用E2E執(zhí)行業(yè)務(wù)場(chǎng)景來(lái)生成數(shù)據(jù)丛版。這種方法是簡(jiǎn)單直接,同時(shí)偏序,效率也低页畦。
通過(guò)API調(diào)用生成測(cè)試數(shù)據(jù)
通過(guò)API調(diào)用生成測(cè)試數(shù)據(jù),是目前主流的測(cè)試數(shù)據(jù)生成方法研儒。我們使用GUI界面生成測(cè)試數(shù)據(jù)豫缨,其實(shí)是依次調(diào)用后端API接口來(lái)生成數(shù)據(jù)。我們知道每個(gè)業(yè)務(wù)邏輯
需要把測(cè)試數(shù)據(jù)進(jìn)行封裝成測(cè)試數(shù)據(jù)準(zhǔn)備函數(shù)端朵,然后調(diào)用API好芭,具體實(shí)現(xiàn)后續(xù)講解。
通過(guò)數(shù)據(jù)庫(kù)操作生成測(cè)試數(shù)據(jù)
通過(guò)數(shù)據(jù)庫(kù)操作生成測(cè)試數(shù)據(jù)逸月,直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUD操作栓撞。需要熟悉每個(gè)業(yè)務(wù)需要對(duì)哪些數(shù)據(jù)表進(jìn)行操作,其次碗硬,熟悉SQL語(yǔ)句編寫(xiě)瓤湘。
綜合運(yùn)用API和數(shù)據(jù)庫(kù)方式生成測(cè)試數(shù)據(jù)
先通過(guò)API調(diào)用生成基礎(chǔ)的測(cè)試數(shù)據(jù),然后使用映射對(duì)數(shù)據(jù)庫(kù)的CRUD操作恩尾,這些都可以用代碼實(shí)現(xiàn)弛说。
現(xiàn)在重點(diǎn)講解使用API生成測(cè)試數(shù)據(jù)準(zhǔn)備方式。使用GUI方式準(zhǔn)備數(shù)據(jù)時(shí)翰意,在頁(yè)面輸入數(shù)據(jù)基本是某個(gè)實(shí)體的屬性(Field)木人,調(diào)用API接口請(qǐng)求參數(shù)也是某個(gè)實(shí)體的屬性。
通過(guò)代碼方式生成測(cè)試數(shù)據(jù)時(shí)冀偶,首先構(gòu)建實(shí)體醒第,把實(shí)體作為參數(shù)傳進(jìn)給API接口。在準(zhǔn)備測(cè)試數(shù)據(jù)大部分屬性可以使用參數(shù)默認(rèn)值进鸠,只有個(gè)別參數(shù)不一樣稠曼,推薦Builder模式來(lái)完成,如果想了解Builder Pattern客年,可以在維基百科查看霞幅。
使用Builder Pattern方式準(zhǔn)備測(cè)試數(shù)據(jù)漠吻,流程如下:
Model > Build > Manipulation > Creation
Model
創(chuàng)建Model,可以選擇根據(jù)數(shù)據(jù)庫(kù)字段創(chuàng)建Model的Field司恳。
public class User {
private Long id;//id
private String username;//用戶名
private String email;//郵箱
private Integer vip;//是否是vip途乃,0-不是,1-是
private Integer sex;//性別扔傅,1-女耍共,2-男
public User() {};
public User(Long id, String username) {
this.id = id;
this.username = username;
}
public User(Long id, String username, String email) {
this.id = id;
this.username = username;
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getVip() {
return vip;
}
public void setVip(Integer vip) {
this.vip = vip;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", email=" + email
+ ", vip=" + vip + ", sex=" + sex + "]";
}
}
Build
運(yùn)用Build Pattern策略建立Builder,目的為了構(gòu)建對(duì)象铅鲤。
@Service
public class UserBuilder {
private User user;
public UserBuilder() {
if (user == null) {
user = new User();
}
}
public User build() {
if (user.getUsername() == null) {
user.setUsername("test");
}
if (user.getVip() == null) {
user.setVip(0);
}
if (user.getSex() == null) {
user.setSex(1);
}
if (user.getEmail() == null) {
user.setEmail("test@sina.com");
}
return user;
}
public UserBuilder withUserName(String userName) {
user.setUsername(userName);
return this;
}
public UserBuilder withVip(int vip) {
user.setVip(vip);
return this;
}
}
Manipulation
使用Builder來(lái)生成對(duì)象
@Test
public void buildCommonUser() {
User user = userBuilder.build();//使用默認(rèn)值構(gòu)建user對(duì)象
User user1=userBuilder.withUserName("Jack").build();//用戶名為Jack的user對(duì)象
}
Creation
生成對(duì)象后划提,可以開(kāi)始調(diào)用API接口生成數(shù)據(jù)或者對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。
@Test
public void buildCommonUser() {
User user = userBuilder.build();
userService.createUser(user);//創(chuàng)建用戶
}
總結(jié)邢享,使用Builder模式生成測(cè)試數(shù)據(jù)方便簡(jiǎn)單鹏往,步驟是:Model->Build->Manipulation->Creation。
參考資料:
1.AN INTRODUCTION TO THE DATA BUILDER PATTERN
2.極客時(shí)間-茹炳晟《軟件測(cè)試52講》