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使用pil生成缩略图的方法
Mar 26 Python
Python处理JSON数据并生成条形图
Aug 05 Python
详解Python文本操作相关模块
Jun 22 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
Python3 requests模块如何模仿浏览器及代理
Jun 15 Python
python设置表格边框的具体方法
Jul 17 Python
python 装饰器的实际作用有哪些
Sep 07 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
HTML node相关的一些资料整理
2010/01/01 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
详解React中合并单元格的正确写法
2019/01/08 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
python 识别图片中的文字信息方法
2018/05/10 Python
使用tensorflow实现线性回归
2018/09/08 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Python随机数函数代码实例解析
2020/02/09 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
北大研究生linux应用求职信
2013/10/29 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
对照四风自我剖析材料
2014/10/07 职场文书