一、前言
2.PageObject设计模式
3.Mocha测试框架
1. 安装
2. 示例脚本
3. 挂钩功能
4.修改脚本
1. 自定义您的浏览器
2.改进用例脚本
3.所有项目文件概览
4. 执行测试脚本
5. 系列总结
一、前言
在第二篇文章中,我们介绍了如何在51testing论坛网站(http://bbs.51testing.com)上完成一个自动发帖测试脚本。所以在这第三篇文章中,也是整个《Puppeteer自动化测试简易入门教 程》系列的最后一篇文章,我们将结合PageObject设计模式和Mocha测试框架,让这个脚本更加模块化和结构化,使其成为真正的自动化测试。工程项目。
2.PageObject设计模式
页面对象模型是自动化测试领域最著名的工程设计模式。最早的概念是由Selenium 项目提出的。
Purpose的创始人之一Simon Stewart于2006年提出,此后被广泛应用于几乎所有的自动化测试项目中。可见,软件测试领域的工程师对这种设计模式的认可程度很高。 PO模型的介绍网上可以找到无数,这里就不浪费篇幅了。
我们的项目采用PO设计模式后,具体的定位元素和测试数据将不会出现在用例脚本中。它们将被分类并存储在相应的页面文件中。在编写不同的用例脚本时我们应该使用哪些元素?或者直接找到相关的页面文件,从数据中调用,这样我们的定位元素和测试数据就可以复用和等价
易于维护。
我们以第二篇文章中写的一个场景为例:登录功能。我们登录的步骤一般是输入用户名
+ 密码,然后点击【登录】即可完成。然后我们就可以将【用户名】输入框、【密码】输入框和【登录】按钮这三个定位元素写入一个名为LoginPage.txt的文件中。如果是用户数据的话,一般可以写在这个文件中。有人会新建一个TestData目录进行存储,这样定位元素和测试数据就可以相互隔离。
//loginPage.js locators: {
usernameInputCss: '#ls_username',passwordInputCss: '#ls_password',
loginBtnCss: '按钮[type='提交'].pn.vm', nameTextCss: '.vwmy',
logoutBtnCss: '#um p:nth-child(2) a:last-child',
logoutMsgCss: '#messagetext',
},
测试数据: {
url: 'http://bbs.51testing.com',
用户名: '蒂诺',
密码:'xxx',
}
//测试用例.js
等待page.type(homePage.locators.usernameInputCss,
homePage.testData.username);//输入用户名
等待page.type(homePage.locators.passwordInputCss,
homePage.testData.password);//输入密码
wait page.click(homePage.locators.loginBtnCss);//点击【登录】按钮
wait page.waitForSelector(homePage.locators.nameTextCss);//验证是否登录成功
Mocha 是一个JavaScript 测试框架。它相当于Python世界中的Unitest和Java世界中的JUnit。不过后两者已经集成到各自的语言中,需要安装Mocha。其实JS的测试框架有很多。除了Mocha之外,还有Jest、Jasmine、CasperJS等,这里介绍Mocha是因为其语法简洁、风格优雅,让我们更容易学*。
1. 安装
在项目目录下执行npm install mocha 安装或者npm install --global mocha 全局安装,这里
我建议全局安装,这样运行测试用例脚本时就可以直接编写mocha xxx.js,无需指定路径。
2. 示例脚本
官网(https://mochajs.org/#getting-started)的示例脚本如下:
var 断言=require('断言');描述('数组',函数(){
描述('#indexOf()',函数(){
it('当值不存在时应该返回-1', function() { assert.equal([1, 2, 3].indexOf(4), -1);
});
});
});
第一行代码引入了Node.js自带的断言库,但是Mocha支持任何第三方断言库。下载您最喜欢的断言库并将其导入以在脚本中使用它:
第二行以示例脚本的文本开头。 describe() 指的是测试套件,单引号中的包名称是套件名称。 it() 引用测试用例,用例名称用单引号引起来。 describe()也可以嵌套在describe()内部,并且it()可以并行多个,这意味着测试套件中有多个测试用例。如果describe()中只有一个it(),套件名和用例名基本可以写成一样。最后一行代码是断言语句。
Mocha 有4 个钩子函数:before()、after()、beforeEach() 和afterEach()。从名字上就可以看出,它们的功能和Unitest中的setUp和tearDown是一样的。它们用于测试用例执行执行预操作
和清理操作,我们看一下官方的说明:
4.修改脚本
了解了PO 设计模式和Mocha 框架后,接下来我们将对上一篇文章中使用的51testing 论坛网站(http://bbs.51testing.com)测试脚本进行改造,只不过我去掉了发帖用例,换成了注销用例。这使得代码更简单。
1. 自定义您的浏览器
这里我新建了一个名为browser.js 的文件,在其中我自定义了两个不同大小的浏览器,一个是默认大小,另一个是最大化大小。我可以调用任何一个在用例脚本中使用。这里注意方法名必须通过module.exports导出,否则在其他文件中不会被调用:
//浏览器.js
const puppeteer=require('puppeteer');
module.exports={ browser_default, browser_max
}//导出模块
异步函数browser_default(){
const browser=wait puppeteer.launch({ headless: false,
SlowMo: 100,可执行路径:
`C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe`
});
返回浏览器;
}
异步函数browser_max(){
const browser=wait puppeteer.launch({ headless: false,
SlowMo: 100,可执行路径:
`C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe`,
args: [
'--窗口大小=1920,1080',
],
默认Viewport: 空
});
返回浏览器;
}
完善第2节中的PO文件(存储定位元素和测试数据)和测试用例脚本。注意,PO文件中的所有内容也需要导出以供调用:
//homePage.js module.exports={
定位器: {
usernameInputCss: '#ls_username',passwordInputCss: '#ls_password',loginBtnCss: '按钮[type='提交'].pn.vm',nameTextCss: '.vwmy',
logoutBtnCss: '#um p:nth-child(2) a:last-child', logoutMsgCss: '#messagetext',
},
测试数据: {
url: 'http://bbs.51testing.com', username: 'tino',
密码:'xxx',
},
断言Msg: {
logoutMsgTxt: '您已退出该站点,现在将以访客身份转移到退出前页面。请稍等. '
}
}
//51testing.js
const browser_max=require('./common/browser.js').browser_max;//导入自定义浏览器const homePage=require('./pageObjects/homePage.js');//导入定位元素
描述('51testing',async()={让浏览器,页面;
之前(异步()={
browser=wait browser_max();//使用最大化浏览器page=wait browser.newPage();
})
之后(异步()={
等待浏览器.close();
})
it('登录', async ()={
等待page.goto(homePage.testData.url);
等待page.type(homePage.locators.usernameInputCss, homePage.testData.username);
等待page.type(homePage.locators.passwordInputCss, homePage.testData.password);
等待page.click(homePage.locators.loginBtnCss);
等待page.waitForSelector(homePage.locators.nameTextCss);
})
it('注销', async ()={
等待page.click(homePage.locators.logoutBtnCss);
等待page.waitForSelector(homePage.locators.usernameInputCss);
})
})
4.执行测试脚本
执行前有两点需要注意:由于Mocha默认运行时间为2S,如果超过这个时间用例还没有执行,就会判断为失败,所以我们在执行命令,这里的时间单位是HS(毫秒)。另一点是Mocha将执行test目录中的测试用例脚本。我们的约定是在项目中新建一个test目录,然后将所有的测试用例脚本放入其中,这样就可以在工作目录下使用mocha命令直接运行脚本了。
以下是脚本的执行。执行之前,我将我使用的浏览器更改为默认大小的浏览器,以便大家可以轻松地在代码编辑器终端中看到一些输出信息:
我们可以看到登录和注销两个测试用例都已经执行并通过了,并且执行前后浏览器启动和关闭操作均成功执行。
5. 系列总结
连续三篇文章《Puppeteer自动化测试简易入门教程》到此结束。我们介绍了Puppeteer的安装、使用和简单应用,以及自动化测试项目涉及到的一些知识。事实上,Puppeteer在国内是一款不太受欢迎的自动化测试工具,但由于它是Google出品,所以它是目前市场上控制Chrome浏览器功能最强大的自动化测试工具。它的功能非常强大,还有很多其他高级的玩法。如果想了解更多,请前往官网(https://pptr.dev/)。另外,也是爬虫工程师的选择之一。它还具有Python 版本——Pyppeteer。会写Python的朋友可以尝试以下方法。
最后附上傀儡师的高清壁纸~祝大家玩得开心!
用户评论
《Puppeteer》是一款让玩家沉浸在自动化测试世界中的游戏作品。
有6位网友表示赞同!
这款游戏提供了深入理解自动化测试的方法,让人沉浸其中,感受不同难度层次的乐趣。
有10位网友表示赞同!
“自动化测试浅梦之旅”这个名字非常契合整个游戏氛围,它仿佛引领玩家穿越梦境般的抽象世界里探索科技和代码的奥妙。
有9位网友表示赞同!
对于技术爱好者和计算机科学学生来说,《Puppeteer》不仅是一个娱乐品,更是一本活生生的教程,用互动方式讲解自动化测试的概念。
有19位网友表示赞同!
游戏中充满了对细节的精心设计,每一个环节都恰如其分地展示了自动化测试的关键点,让玩家有深刻的体验感。
有8位网友表示赞同!
“自动测试的世界是如此独特”,玩家被引入一个全新的角色扮演体系——在这里,每个人都可以成为一名自动化测试专家。”
有6位网友表示赞同!
通过游戏《Puppeteer》,人们学会了如何编写有效且精简的代码,用于自动化重复性任务,从而提高了效率和成果质量。
有17位网友表示赞同!
“游戏过程中的挑战令人兴奋”,玩家在解决问题的同时也锻炼了他们的逻辑思维能力.
有20位网友表示赞同!
该系列游戏第三集更侧重于深入理解测试框架和自动化工具的应用,在乐趣中探索新的知识领域。
有19位网友表示赞同!
每个场景都以有趣的方式描绘出软件测试的过程,使得枯燥的技术信息变得生动有趣。
有5位网友表示赞同!
通过游戏的剧情发展,《Puppeteer》让人们体会到了“自动化测试”的力量如何在现实中改善我们的工作流程和代码质量。
有12位网友表示赞同!
《Puppeteer》不仅仅是一个游戏,“浅梦之旅”让人沉浸其中,在挑战与探索中学*到自动化测试的重要性
有13位网友表示赞同!
玩家反馈显示,这款游戏既适合作为教育工具,也提供了放松的娱乐方式,将科技学*融入轻松的游戏体验之中。
有14位网友表示赞同!
角色的多样性和每个任务的独特性使得游戏过程充满惊喜和新鲜感,让玩家乐此不疲地探索每一个细节。
有5位网友表示赞同!
《Puppeteer》三集系列以其创新的故事讲解、详实的角色发展和对测试流程的深入演绎赢得了广泛的赞誉。
有7位网友表示赞同!
这款游戏通过寓教于乐的方式,提高了公众对自动化测试认识的兴趣,同时也激发了人们对技术领域的探索热情。
有10位网友表示赞同!
在“自动化测试浅梦之旅”中,玩家不仅感受到了游戏带来的乐趣,还学会了宝贵的测试技能和思维模式。
有18位网友表示赞同!
从游戏反馈来看,《Puppeteer》已经成为了推动自动化测试教育普及的重要工具之一。
有9位网友表示赞同!
“浅梦之旅”的系列特色让每个人都能从中找到自己的兴趣点,并在这个过程中掌握了自动化测试的核心概念和应用技巧。
有5位网友表示赞同!
对于《Puppeteer》系列中的第三集,玩家最常提及的是它的高互动性和沉浸度,游戏将技术知识的传授变成了一个令人着迷的游戏冒险。
有12位网友表示赞同!
通过玩这款游戏,不仅加深了对自动化测试的理解,同时也培养了解决问题和提高代码效率的能力。
有5位网友表示赞同!
“一次深奥的视觉和技术探索之旅”,《Puppeteer》第三部充分展示了游戏设计师对教育内容与娱乐融合的独特理解。
有10位网友表示赞同!