当前位置:网站首页>selenium自动化集成,八年测试经验软测工程师,一篇文章带你学懂
selenium自动化集成,八年测试经验软测工程师,一篇文章带你学懂
2022-07-07 06:12:00 【软件测试呀】
问题
当我们描述一个“好的自动化测试用例”时,经常出现标准是:
精确
自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败
独立
自动化测试用例不应该受测试套件中任何其他测试用例影响
快速
这不需要太多的解释。自动化测试用例套件运行得越快,它就越有用
这些标准在Selenium测试套件中可能特别具有挑战性。原因在于,Selenium的UI自动化测试通常涉及可能包括注册,登录,某些导航,表单提交或与网站的其他交互的设置。只有在做完这些事情之后,你才可以在网站的某些方面做出断言。但是这样就会引入一些和原本的测试用例无关的错误导致自动化脚本运行失败。
02、解决方法
现在很多新的网站的后端都采用REST API。如果能够在脚本中通过访问REST API来完成一些基础的必要操作,而不是在UI上,这样将提高我们测试的执行效率。
REST API基于HTTP协议,这是基本上支持整个互联网的协议。几乎所有现代编程语言都有可用于发出HTTP请求的库,因此,我们可以将调用REST API的支持添加到几乎任何测试套件中。
03、实例
很多测试中都会遇到新建账号的问题。需要测试新的账号在登陆之后的行为。如果能够使用REST API来新建用户的话,就可以大大的节省填写新建账号的表单的时间。
这里假设一个虚拟的REST API
POST http://api.myfakeapp.com/v1/create-user
通过POST方法可以新建用户。
Body里面需要填充的JSON数据如下:
{
'username': 'example-username',
'password': 'abcd1234',
'email': '[email protected]',
'first_name': 'bob',
'last_name': 'example'
}
下面是代码实现:
require '
rest-cli
ent'
require '
json
'
require '
securerandom
'
class RestApiInterface
@headers = {
'
content-type
' => '
application
/json
',
'
user-agent
' => '
Rest Api Helper
',
}
def post_to_api url, post_body_obj
json_body = JSON.generate(post_body_obj)
response = RestClient.post url, json_body, @headers
end
def create_test_user
# Step 1: Build the user parameters randomly
random_test_user = {
'
username
' => random_string,
'
password
' => random_string,
'
email
' => "
#{random_string}@testing.com
",
'
first_name
' => '
test
',
'
last_name
' => '
user
',
}
# Step 2: Execute the API call
response = post_to_api "
http://api.myfakeapp.com/v1/create-user
",
random_test_user
# Step 3: Ensure the api call returned a success code
if response.code != '
200
'
raise '
User creation failed
'
end
# Final Step: Return the user object so we can use it
response.body['
user
']['
data
']
end
def random_string
# This is an easy way to get a good randomized string
SecureRandom.hex
end
end
$driver
= Selenium::WebDriver.for :firefox
user = RestApiInterface.new.create_test_user
$driver
.get 'http://myfakeapp.com'
$driver
.find_element(:css, 'input[name="
username
"]').send_keys @user['
username
']
$
driver
.find_element(:css, 'input[name="
password
"]').send_keys @user['
password
']
$driver
.find_element(:css, 'button[name="
login
"]').click
puts
$driver
.find_element(:css, '
#user_id
').text
04、总结
这里只是给出了一个如何把API访问和UI自动化结合的思路。在这个思路的引导下,可以对UI自动化测试进行很多扩展,例如校验界面数据元素的数据和API中数据的一致性等等。
房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。
领取关 w/x/g/z/h:软件测试小dao
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
边栏推荐
- Greenplum6.x常用语句
- JEditableTable的使用技巧
- Lenovo hybrid cloud Lenovo xcloud: 4 major product lines +it service portal
- Virtual address space
- Iptables' state module (FTP service exercise)
- 【踩坑】nacos注册一直连接localhost:8848,no available server
- Greenplum 6.x reinitialization
- 南京商品房买卖启用电子合同,君子签助力房屋交易在线网签备案
- Frequently Asked Coding Problems
- [Yu Yue education] higher vocational English reference materials of Nanjing Polytechnic University
猜你喜欢
Image segmentation in opencv
ncs成都新電面試經驗
如何在快应用中实现滑动操作组件
Novice entry SCM must understand those things
MySQL introduction - crud Foundation (establishment of the prototype of the idea of adding, deleting, changing and searching)
Input of mathematical formula of obsidan
What is the method of manual wiring in PCB design in 22protel DXP_ Chengdu electromechanical Development Undertaking
Through the "last mile" of legal services for the masses, fangzheng Puhua labor and personnel law self-service consulting service platform has been frequently "praised"
Count sort (diagram)
Analysis of using jsonp cross domain vulnerability and XSS vulnerability in honeypot
随机推荐
A single game with goods increased by 100000, and the rural anchor sold men's clothes on top of the list?
You should use Google related products with caution
Greenplum6.x搭建_环境配置
idea里使用module项目的一个bug
Introduction to data fragmentation
Greenplum 6.x version change record common manual
Greenplum6.x常用语句
Go write a program that runs within a certain period of time
Appeler l'interface du moteur de création du service multimédia de jeu Huawei renvoie le Code d'erreur 1002, le message d'erreur: les paramètres sont l'erreur
Count sort (diagram)
Redis summary
Thirteen forms of lambda in kotlin
[Chongqing Guangdong education] accounting reference materials of Nanjing University of Information Engineering
[南京大学]-[软件分析]课程学习笔记(一)-introduction
Golang compilation constraint / conditional compilation (/ / +build < tags>)
[wechat applet: cache operation]
QT charts use (rewrite qchartview to realize some custom functions)
Other 7 features of TCP [sliding window mechanism ▲]
GOLand idea intellij 无法输入汉字
Download and install orcale database11.2.0.4