ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Web自动化测试实践分享

2022-06-28 17:31:29  阅读:163  来源: 互联网

标签:定位 浏览器 Web 标签 用例 allure 自动化 分享 页面


一、环境安装

Pycharm安装:python开发工具

https://www.jetbrains.com/pycharm/download/#section=windows

Python安装: 面向对象的脚本语言

https://www.python.org/

Selenium安装:用于Web应用程序测试的工具

pip install –U selenium

Pytest安装:自动化测试框架

pip install pytest

浏览器驱动安装:测试工具与浏览器的交互

http://npm.taobao.org/mirrors/chromedriver

(需要配置环境变量的记得配置一下环境变量)

二、运行原理

Web自动化是代码与浏览器之间进行交互,由代码发送命令来驱动浏览器执行相应的操作。

Selenium代码与浏览器驱动程序之间是通过http协议进行数据交互的。这种方式,不在乎客户端是什么样的形式,只要数据的格式和协议是服务端能够解析的就可以。

通信步骤:

1、  Webdriver启动浏览器驱动程序,并设置侦听端口号

2、Webdriver客户端与浏览器服务端建立连接

3、连接成功后,所有的操作(比如查找元素、点击等)都是客户端通过commandExecuter发送http请求到服务端,服务端根据收到的请求做相应的操作并返回结果。

selenium 原理:就是通过webdriver 给浏览器的驱动发送命令,打开浏览器,建立http通信请求 然后通过发送各种命令让浏览器进而执行各种操作(selenium 原理)

 

三、框架分层介绍

UI测试框架主要用了数据驱动,关键字封装和PO思想搭建的,PO的核心思想是测试用例=页面对象+测试数据的,分离了测试用例和测试对象。

根据PO的思想,框架分为以下六层:

一是common层,该层主要是basepage,其basepage中包含所有待测试的page的公共方法把每个要测试的对象封装在一个class类中所有的pageobject继承basepage;如点击,等待元素,输入,截图,获取文本内容上传下载等的一些关键词,还存放封装好的日志,配置文件,文件路径脚本,框架运行入口等文件,封装关键词是为了减少冗余;

二是pagelocator层,主要是存放以页面为单位的元素定位;

三是pageobject层,主要是存放按照页面封装的页面操作;

四是testcase层,主要是存放按照功能模块划分的用例;

五是testdata层,主要是存放测试数据;

六是output层,主要存放截图,日志,报告等输出的文件。

四、元素定位

Selenium 八种元素定位方法:

1、id定位: find_element_by_id()

2、name定位: find_element_by_name()

3、class定位:find_element_by_class_name()

4、tag定位:find_element_by_tag_name()

5、link定位:find_element_by_link_text()

6、partial_link定位:find_element_by_partial_link_text()

7、CSS定位:find_element_by_css_selector()

8、xpath定位:find_element_by_xpath()

xpath基本定位语法:

 

1、绝对定位

特点:1.以单斜杠/开头;2.从页面根元素(HTML标签)开始,严格按照元素在HTML页面中的位置和顺序向下查找

如:"/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input"

2、相对定位

特点:1.以双斜杠//开头;2.不考虑元素在页面当中的绝对路径和位置;3.只考虑是否存在符合表达式的元素即可。

我们一般都使用相对定位来定位元素。下面来介绍下常用的相对定位表达式。

2.1使用标签名+节点属性定位

语法://标签名[@属性名=属性值]

如:"//input[@id='baidu']"

2.2.组合元素索引(下标)定位

如:"//input[@id='baidu'][2]"

2.3.通过部分属性值匹配

语法://标签名[contains(@属性名,部分属性值)]、//标签名[starts-with(@属性名,部分属性值)]、//标签名[ends-with(@属性名,部分属性值)]

a. starts-with     

如: //input[starts-with(@id,'ctrl')]           

解析:匹配以 ctrl开始的属性值

b. ends-with       

如://input[ends-with(@id,'_userName')]    

解析:匹配以 userName 结尾的属性值

c. contains()       

如://input[contains(@id,'userName')]        

解析:匹配含有 userName 属性值

2.4.使用文本内容匹配

函数:text()

语法:文本全部匹配://标签名[text()=文本内容]

文本部分匹配-包含://标签名[contains(text(),部分文本内容)]

如:"//a[text(),"退出"]"

如:"//a[contains(text(),"出")]

2.5、使用轴定位表达式(使用较多场景:页面显示为一个表格样式的数据列)

轴运算名称:

ancestor:祖先节点,包括父节点

parent:父节点

preceding:当前元素节点标签之前的所有节点(HTML页面之前的)

preceding-sibling:当前元素节点标签之前的所有兄弟节点(同级)

following:当前元素节点标签之后的所有节点

following-sibling:当前元素节点标签之后的所有兄弟节点(同级)

使用语法:轴名称::节点名称

前后的定位与之前一致,用/隔开即可。

 

定义一个类,类的名称用当前页面的名称+Page+Locator:

如登录页面:LoginPageLocator

然后根据需要写元素定位

 

 

 

五、元素操作

定义一个类,类的名称用当前页面的名称+Page:

如登录页面:LoginPage

然后根据需要写每个操作

 

 

 

六、用例编写

在编写自动化测试用例过程中应该遵守以下几点原则:

1、一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器。

2、一个用例只验证一个功能点,不要试图在用户登录系统后把所有的功能都验证一遍。

3、尽量少的编写逆向逻辑用例。一方面因为逆向逻辑的用例很多(例如,手号输错有几十种情况);另一方面自动化脚本本身比较脆弱,对于复杂的逆向逻辑用例实现麻烦且容易出错。

4、用例与用例之间尽量避免产生依赖。

5、一条用例完成测试之后需要对测试场景进行还原,以免影响其它用例的执行。

定义一个类,类的名称以Testk开头+当前操作的名称:

如登录页面:TestLogin

然后根据需要写每个步骤

 

 

 

七、测试报告

Allure报告:

下载版本:https://github.com/allure-framework/allure2/releases

下载完成之后,解压到 pytest 目录中。然后设置环境变量,简单一点就是进入 \allure\bin 目录执行 allure.bat 。cmd 输入 allure 查看环境变量是否设置成功

下载 allure-pytest 插件,用来生成 Allure 测试报告所需要的数据

@allure 装饰器中的一些功能点:

@allure.epic("epic对大Story的一个描述性标签,敏捷里面的概念,定义史诗,往下是 feature ")

@allure.feature("功能点的描述,理解成模块,如成本中心模块,往下是 story ")

@allure.story("用户故事的描述,如成本中心增删改查操作")

@allure.title("用例标题,如新增成本中心")

@allure.description("用例内容的描述,如测试【新增成本中心】功能,正向场景验证")

@allure.severity('用例等级,如critical')

生成报告命令:allure generate report/ -o report/html

--clean参数用来清空已有的报告,避免覆盖时出错

allure generate report/ -o report/allure --clean

在执行时会找到你的report路径下的.xml文件进行解析,生成最终报告到report/html文件夹下

标签:定位,浏览器,Web,标签,用例,allure,自动化,分享,页面
来源: https://www.cnblogs.com/micifang/p/16420321.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有