python实现测试工具(二)——简单的ui测试工具


Posted in Python onOctober 19, 2020

本系列教程使用的python版本是3.6.3。

背景

这一节我们实现一个简单的ui测试工具。

该工具的作用是访问某个页面,然后根据css选择器去定位页面上的元素,最后判断页面上元素的个数与我们的预期是否相符。

举一个具体的例子,比如我们去访问www.itest.info这个页面,我们需要判断页面上class = thumbnail-img的元素存在,并且有4个。因为每一个元素代表一门课程,所以这个断言的意思是重定向科技主页上应该有4门主要课程。

视频讲解在这里。

工具设计

我们设计一个命令行工具,给工具传3个参数。

  • 被访问页面的url
  • 页面上元素的css选择器
  • 预期的元素数量,页面上可以存在n个元素,如果传入0,则表示元素不存在,做反向断言

所以工具大概是这样用的: python script_name.py url css_selector length

代码实现

简单起见,我们会用到requests-html库。安装文档在这里。

from requests_html import HTMLSession
from sys import argv
DEBUG = True

USAGE = '''
USAGE:
python html_assertion.py www.itest.info .thumbnail-img 4
'''

if len(argv) != 4:
 print(USAGE)
 exit(1)

script_name, url, css_selector, length = argv

if url[:4] != 'http':
 url = 'http://' + url

session = HTMLSession()
r = session.get(url)

elements = r.html.find(css_selector)


def debug():
 if DEBUG:
  print('*' * 100)
  print(f"css选择器: {css_selector}, 共找到{len(elements)}个元素\n")
  for element in elements:
   print(element.html)
   print(element.attrs)
   print()


if len(elements) != int(length):
 print(f"失败! 预期{length}个元素,实际存在{len(elements)}个元素\n")
 debug()
 exit(1)
else:
 print(f"成功!\n")
 debug()

精讲

用例失败之后使用exit(1)表示异常退出,这样在使用jenkins运行的时候,用例失败jenkins的job结果也会相应失败
requests-html库的基本使用参考这里

运行示例

# 失败情况
python html_assertion.py www.itest.info .thumbnail-img 1
失败! 预期1个元素,实际存在4个元素

****************************************************************************************************
css选择器: .thumbnail-img, 共找到4个元素

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/7/mission_impossible_cut.jpg"/></div><a class="btn-more hover-effect" href="/courses/7" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/6/120606ineam4nspdc6qdaw.jpg"/></div><a class="btn-more hover-effect" href="/courses/6" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/3/12.jpg"/></div><a class="btn-more hover-effect" href="/courses/3" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/2/13.jpg"/></div><a class="btn-more hover-effect" href="/courses/2" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

# 成功情况
python html_assertion.py www.itest.info .thumbnail-img 4
成功!

****************************************************************************************************
css选择器: .thumbnail-img, 共找到4个元素

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/7/mission_impossible_cut.jpg"/></div><a class="btn-more hover-effect" href="/courses/7" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/6/120606ineam4nspdc6qdaw.jpg"/></div><a class="btn-more hover-effect" href="/courses/6" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/3/12.jpg"/></div><a class="btn-more hover-effect" href="/courses/3" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/2/13.jpg"/></div><a class="btn-more hover-effect" href="/courses/2" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

动手时间

  • 抄一遍代码,看自己能不能运行起来
  • 给这段代码每一行都加上注释,理解代码做了些什么

扩展阅读

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

源码地址

github地址

以上就是python实现测试工具(二)——简单的ui测试工具的详细内容,更多关于python ui测试的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python开发编码规范
Sep 08 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
Python网络编程 Python套接字编程
Sep 13 Python
python中实现字符串翻转的方法
Jul 11 Python
Python中常用的8种字符串操作方法
May 06 Python
python把转列表为集合的方法
Jun 28 Python
python tkinter窗口最大化的实现
Jul 15 Python
Python3 JSON编码解码方法详解
Sep 06 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 #Python
基于Python制作一副扑克牌过程详解
Oct 19 #Python
Python实现壁纸下载与轮换
Oct 19 #Python
Python调用REST API接口的几种方式汇总
Oct 19 #Python
Python爬虫抓取论坛关键字过程解析
Oct 19 #Python
python MD5加密的示例
Oct 19 #Python
python Yaml、Json、Dict之间的转化
Oct 19 #Python
You might like
PHP详细彻底学习Smarty
2008/03/27 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
python编程实现希尔排序
2017/04/13 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
python使用selenium实现批量文件下载
2019/03/11 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
村捐赠仪式答谢词
2014/01/21 职场文书
教师个人师德总结
2015/02/06 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
导游词之桂林
2019/08/20 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
html粘性页脚的具体使用
2022/01/18 HTML / CSS