| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 【软件测试】总结web自动化测试-selenium+python -> 正文阅读 |
|
[开发测试]【软件测试】总结web自动化测试-selenium+python |
自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。
一、使用selenium IDE录制测试脚本selenium IDE,可以安装到浏览器的插件上,Microsoft Edge浏览器中,可以不用翻墙,就能安装IDE,而像Chrome浏览器,好像要翻出去才能安装。这里就不细说Chrome怎么装了,以下是Edge浏览器的安装流程。
安装成功后,在“地址栏”的右边就会出现图标,又或者点击扩展就能看到。 录制脚本过程如下:
以上就是用selenium IDE,进行录制脚本,并且将录制的脚本转换为编程语言,例如Python。 二、Python+selenium 环境搭建1、Python+selenium我自己安装的Python3.10版本,编译环境用的是pycharm。 在安装Python解释器的时候,直接用默认安装路径即可,如下,是我的安装路径: pycharm的配置:
上诉是在pycharm上安装selenium包,有的人可能安装不上,那么可以试试在cmd命令行窗口试试这条命令:
安装好后,就是这样的 2、webdriverselenium安装好之后,就只差一个浏览器驱动了。不同的浏览器,不同的版本,驱动是不一样的。Chrome浏览器,国内有镜像源 可以在这里找到Chrome的驱动。Edge浏览器,好像不用翻墙也能够下载到。 在下载驱动的时候,驱动的版本号要和浏览器的版本号对应上,有可能你安装的浏览器的版本号,找不到相应的驱动。安装临近的驱动版本号也是可以的。如图: 将下载好的驱动,解压到Python解释器的安装路径下(Script文件夹),如下: 至此,环境就搭建好了。 三、selenium下,webdriver的常用API在讲解API时,我们首先要知道selenium需要导包的,如下:
1、定位元素在打开百度搜索之后,我们需要定位到“搜索框”,然后才能进行输入。那么如何定位到搜索框呢?我们有以下几种方法: 1)、id 和nameid 和name 是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且在对控件的id 和name 命名时一般使其有意义也会取不同的名字。通过这两个属性使我们找一个页面上的属性变得相当容易。 在浏览器中,打开开发者工具(按F12)。就能查看到页面的每一个元素的前端代码。
2)、tag name 和 class name看上图,知道搜索框的标签是“input”,并且class=“s_ipt”。那么我们也可以通过这两个属性进行定位。但是需要知道的是,使用tag name 进行定位,可能得到的不止一个标签的数据。所以在使用的时候,需要注意页面共有多少个相同的标签。
3)、CSS_selector 定位
4)、Xpath定位上图两个都行
5)、link text有的时候,页面不是搜索框之类的,而是一条链接,也就是HTML中的a标签,此时就可以link text进行定位,值得注意的是,这种定位,输入的参数,也就是这条链接的名称,在当前页面只能是唯一的。只有这样,才能通过link进行定位。
6)、partial link text根据名称都知道,这就是link text的模糊查询。如下:
只通过一个“闻“字,就能够定位到”新闻“. 2、操作测试对象前面讲了很多的定位元素的操作,那么定位到元素之后,又有如下这些操作;
以上就是一份完整的代码,先是搜索了彭于晏,然后清空输入框,再搜索胡歌。 3、添加等待在上面的代码中,可能你已经看到了time.sleep(),这就是等待。这个time,是需要导入time包的。除了这个,还有一个等待的函数
括号里面填的是最长等待时间,单位秒。 这个方法呢,可以在这样的场景下使用: 在搜索出结果后,需要点击百度百科,查看详细信息。因为在点击搜索彭于晏的时候,浏览器需要向后台发送请求,只能后台给出回应之后,才能看到这“百度百科”这几个字,这个时候才能点击。所以在点击百度百科的时候,是需要等待后台响应的,这段时间,人们是不能把控的,就可以通过智能等待,这个函数。 上诉代码的意思就是,在5秒之内,“百度百科”这几个字出来之后,就直接点击了。不需要傻傻的等待5秒。那么如果5秒后,还没点击的haul,就会报出异常。
4、打印信息可能通过一些函数,查看当前网页的URL和title的信息,如下
5、浏览器的相关操作浏览器窗口的最大化和最小化:
除了最大化最小化,我们还可以手动的设置窗口的长宽。
浏览器的后退和前进,也就是浏览器左上角的两个箭头。
控制网页的滚动条。python是做不到这个操作的,只能通过javaScript的语句,来达到。
scrollTop 设置为10000,表示滚动条拉到最下面。相反的,设置为0,就表示将滚动条拉到最上面。execute_script(script, *args),在当前窗口/框架同步执行javaScript 。 6、键盘事件在有些场景,我们是需要使用键盘的,我们也是可以通过驱动,来按动键盘,也可以使用组合键,比如Ctrl + C等等。
7、鼠标事件还是一样的,需要使用到鼠标,首先还是需要先进行导包
这个类里面有以下几种操作:
ActionChains(driver), 生成用户行为。所有的行为都存储在ActionChains对象里面,通过perform()存储的行为。 double_click§,双击p所指向的元素。 perform(),执行所有存储的行为。 8、多层框架和窗口定位多层框架或窗口的定位:
对于一个现代的web 应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame 中,seelnium webdriver 提供了一个switch_to_frame 方法,可以很轻松的来解决这个问题。switch_to_frame(name_or_id_or_frame_element):可以简单记忆一下,如果这个frame有name和id属性那么就用这两个属性就好,如果没有的话可以先用find_element_by_xxx方法找到这个frame元素,然后把这个元素传进去,这也是可行的。switch_to_frame()把当前定位的主体切换了frame里。怎么理解这句话呢?我们可以从frame的实质去理解。 还有可能嵌套的不是框架,而是窗口,还有针对窗口的方法:switch_to_window(),用法与switch_to_frame ()相同: 9、上传文件上传文件也是比较常见的操作,比如在gitee上,重新上传自己账户的头像之类的,都是上传文件的操作。 其实思路还是跟上面介绍的操作一样的,首先还是需要先定位到上传按钮,然后直接send_Keys(),括号里面输入的就是图片的绝对地址。
四、unittest框架1、批量执行测试用例在上文,我们在写代码时,都是一个测试用例,就要写一个 作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,我们虽然不需要做白盒测试,但是必须需要知道所使用语言的单元测试框架。利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,到时候直接执行,同时引入测试报告。
像这样写,意思就是该类,继承与unittest的TestCase。然后在这个类里面写一个函数就行。那么该如何调用这个类呢?非常简单,如下:
在执行测试用例之前,我们还需要做一些
完整的代码如下:
现在大致的样子,就是这样的。接下来就是需要我们写测试用例的代码了。 这个框架有个怪脾气,我们写的测试用例的函数名,必须是以“test_”开头,不然的话,他是不会执行这个函数的。如下
这样,我们就用unittest框架,跑了一个测试用例,如果还有其他测试用例,我们只需要在类里面另外在写一个函数即可。 执行流程: 假设有很多测试用例,都写进了测试类里面,在执行代码的时候,每执行一个测试用例,它就是重新调用setUP函数,这个测试用例执行结束之后,也会先调用tearDown函数,然后才执行下一个测试用例。 我们还可以使用类似于java中的注解,可以忽略某一个测试用例。
2、unittest断言除此之外,unittest框架还提供了断言,当测试用例很多时,程序猿眼睛可能是看不完的。这个时候我们就可以使用断言,用于判断实际结果与预期结果不相等时,就会提示测试失败。
如上,当title不相等时,就会提示测试失败,在终端就能够看到这些信息。其他的一些断言方法: 当然,当断言失败,也就是预期结果与实际结果不相等时,我们还可以使用try、except语句,进行处理,将结果进行截图保存。
3、HTML测试报告在所有的测试用例执行完之后,我们还可以自动生成一个测试报告,里面就写清楚了很多信息。我们需要通过HTMLTestRunner.py 来生成测试报告,这个python解释器没有自带,需要自己下载。 然后将下载的包,放到下面这个Lib文件夹里面。
上诉代码中,使用到了suite。称为单元测试用例的集合,也就是将所有的 4、数据驱动在上文中的所有代码中,我们在输入参数的时候,都是事先在代码中写好的,不够方便。那么我们可以事先将所有的测试用例写到一个 python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成 。
导包:
要想一个类,能够使用数据驱动,那么需要在这个类的前面写这一行代码: 要想一个函数,能够自动添加测试的数据,就需要在这个函数的前面写这样一行代码:(只需在括号里填数据就行) 或者还可以输入两个参数的形式: 上面这样的代码,虽然能够做到自动添加测试数据,但是还是不够好,如果测试数据有100万行,难道要全部一次性写在函数名前面吗? 显然没必要,此时就用到了txt文件。如下 我的txt文件内容如下,具体改怎么写读取文件的内容,还是要看你的txt文件是怎么洗的。(第一行要写data,表示这是测试数据) 也还可以读取json文件,这里我们就不多介绍了。 好啦,本期更新就到此结束啦,我们下期再见吧!!! |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 4:32:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |