Selenium篇实战--结合接口测试和图形界面测试

文章描述了一个使用Python脚本job.py在Jenkins上创建新Job的过程,包括删除同名Job的前置步骤,通过Selenium操作图形界面,以及利用jenkins的RESTAPI进行验证。同时,文章强调了脚本化测试和混合使用API与图形界面操作的重要性。
摘要由CSDN通过智能技术生成

场景3_新建一个job.py

#####################################

# -*- coding: gbk -*-
from operations import Operations
from log import logger
from browser import Browser
 
from domain.jenkins import Jenkins
 
logger.info("测试场景3开始:创建一个job")
browser = Operations(Browser.start_chrome())
 
logger.info("测试前置条件:预先删除原有的同名job,job名字={job_name}")
# 准备一个Jenkins类的实例,用来做测试的各种准备工作
admin = Jenkins()
job_name = "场景3测试job"
# 不管job存在不存在,总之删一下试试,如果存在则删除掉,不存在则忽略
admin.delete_job(job_name)
# 快捷登陆
admin.login_jenkins(browser)
 
# 真正要测的场景开始
# 点击左侧新建item的链接来创建一个jenkins job
browser.click("css:a[href='/view/all/newJob']")
# 输入job名称
browser.input("id:name", job_name)
# 选择job类型
browser.click("css:li[class='hudson_model_FreeStyleProject']")
# 点击确定按钮
browser.click("id:ok-button")
# 点击保存按钮
browser.click("xpath://button[text()='保存']")
# 真正要测的场景完毕
 
#验证job是否创建成功
assert admin.check_if_job_existed(job_name),f"创建失败:job名称={job_name}"
 
# 关闭浏览器
browser.close()
logger.info("测试场景3结束")

运行结果,屏幕显示以下内容:

[2021-12-01 13:45:21.141879]测试场景3开始:创建一个job
[2021-12-01 13:45:21.141879]启动Chrome浏览器
[2021-12-01 13:45:22.368721]测试前置条件:预先删除原有的同名job,job名字={job_name}
[2021-12-01 13:45:22.590128]job=场景3测试job已删除
[2021-12-01 13:45:22.590128]浏览器打开url=http://localhost:8080/
[2021-12-01 13:45:22.787905]开始检查cookie是否还有效:
[2021-12-01 13:45:22.787905]启动Chrome浏览器headless模式
[2021-12-01 13:45:23.734861]浏览器打开url=http://localhost:8080/
[2021-12-01 13:45:23.998166]开始保存cookie到path=cookies.txt
[2021-12-01 13:45:23.998166]增加cookis={'httpOnly': False, 'name': 'screenResolution', 'path': '/', 'secure': False, 'value': '800x600'}
[2021-12-01 13:45:24.003202]增加cookis={'httpOnly': True, 'name': 'JSESSIONID.c1e2fbc7', 'path': '/', 'secure': False, 'value': 'node09x8lb1jyt3ez9l9d01jyqq7j42.node0'}
[2021-12-01 13:45:24.005148]保存cookie完毕
[2021-12-01 13:45:24.005148]浏览器打开url=http://localhost:8080/
[2021-12-01 13:45:24.155321]开始获取元素的文本,元素=xpath://div[@class='login']
[2021-12-01 13:45:24.155321]定位元素,使用定位语句=xpath://div[@class='login']
[2021-12-01 13:45:24.181251]完毕获取,文本= admin | 注销
[2021-12-01 13:45:24.186238]结果:cookie有效
[2021-12-01 13:45:26.200825]开始保存cookie到path=cookies.txt
[2021-12-01 13:45:26.200825]增加cookis={'httpOnly': False, 'name': 'screenResolution', 'path': '/', 'secure': False, 'value': '800x600'}
[2021-12-01 13:45:26.204822]增加cookis={'httpOnly': True, 'name': 'JSESSIONID.c1e2fbc7', 'path': '/', 'secure': False, 'value': 'node09x8lb1jyt3ez9l9d01jyqq7j42.node0'}
[2021-12-01 13:45:26.207807]保存cookie完毕
[2021-12-01 13:45:26.207807]浏览器打开url=http://localhost:8080/
[2021-12-01 13:45:26.325493]在元素='css:a[href='/view/all/newJob']'上执行鼠标点击
[2021-12-01 13:45:26.325493]定位元素,使用定位语句=css:a[href='/view/all/newJob']
[2021-12-01 13:45:26.469110]在元素='id:name'上输入文本=场景3测试job
[2021-12-01 13:45:26.469110]定位元素,使用定位语句=id:name
[2021-12-01 13:45:26.549892]在元素='css:li[class='hudson_model_FreeStyleProject']'上执行鼠标点击
[2021-12-01 13:45:26.549892]定位元素,使用定位语句=css:li[class='hudson_model_FreeStyleProject']
[2021-12-01 13:45:26.584799]在元素='id:ok-button'上执行鼠标点击
[2021-12-01 13:45:26.584799]定位元素,使用定位语句=id:ok-button
[2021-12-01 13:45:27.228078]在元素='xpath://button[text()='保存']'上执行鼠标点击
[2021-12-01 13:45:27.228078]定位元素,使用定位语句=xpath://button[text()='保存']
[2021-12-01 13:45:27.470430]job=场景3测试job存在,url=http://localhost:8080/job/%E5%9C%BA%E6%99%AF3%E6%B5%8B%E8%AF%95job/
[2021-12-01 13:45:27.470430]浏览器关闭当前窗口或tab
[2021-12-01 13:45:27.523288]测试场景3结束

解说:

1.首先为什么要完善?因为之前的写法重跑会失败。

这次的测试场景很简单,在jenkins上创建一个名为"场景3测试job"的job,然后保存。但是之前实战012里写的脚本只能跑一次,再跑就会失败,因为跑完一次之后,就会创建出这个job,再重跑就会失败。

2.怎样解决重跑失败?跑之前删除同名job。

3.怎样删除同名job?调用jenkins 的rest api来删。

我之前就说了,一个脚本测一个场景。我用selenium测创建job的场景,这是因为我要测的是通过jenkins的图形界面创建一个job。而删除同名job只是这个测试场景的准备工作,准备工作完全没必要通过图形界面来做。因此,我通过调用jenkins rest api来做准备工作。

4.跑完之后怎么验证job是否创建成功了?调用jenkins 的rest api来验证。

同样道理,这个场景的验证也不需要通过图形界面来验证。

5.关于class Jenkins这个类。

设计了delete_job这个用于删job的方法和check_if_job_existed这个检查job是否存在的业务方法。

然后实现了jenkins的登陆鉴权。jenkins的鉴权是标准的http basic auth基础鉴权加上防止CSRF攻击的crumber issuer安全验证。在这个类里,要删除job,就要通过rest api的方式发送符合这两个机制要求的请求,调用才能成功。

另外,还把之前的登陆浏览器的方法login_jenkins也移动到了这个类里,因此场景2也要做一点小修改。但我相信读者可以自己改好,此处不再赘述。

最后,请读者注意体会场景3中的api和图形界面操作混合调用的做法及其意义。正因为有了这种混合操作,我们才可以在单个脚本里聚焦于单个脚本的业务逻辑,我们才可以抛弃以前传统的页面对象模式。因为页面对象模式里定义的服务毫无意义,这些服务我们直接用rest接口实现即可。传统页面对象中,页面=服务+元素。而经过上面的解释,页面对象的服务封装毫无意义。同理,页面对象的元素封装也毫无意义。因为在我的脚本化思路下编写的脚本,并不需要重用元素。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值