webUI自动化之基本框架搭建(python + selenium + unittest)

本文介绍了如何使用Python、Selenium和unittest构建webUI自动化测试框架,涵盖页面对象模型(POM)、测试报告、邮件通知和数据驱动等内容,适合有一定Python基础的测试人员学习。

一、 前言

该文档描述一次基于python的webUI自动化框架搭建过程及简单的使用。

框架构成:python + selenium + unittest

二、准备及编写条件

准备:

IDEA工具:pycharm(社区版即可)

Python3.9

Webdriver.exe文件下载好,将该文件放在本地python的lib文件夹下,并将其配置到环境变量(实际上放到python的任意文件夹下都可以,但必须将其配置到环境变量,以便于运行时能找到这个文件)。或者在代码中指定驱动的路径也可以。如:driver = webdriver.Chrome(executable_path=‘driver/chromedriver.exe’)

Chrome浏览器

注意:Webdriver.exe的版本需要和浏览器版本一致,不一致则会报错,浏览器版本可通过浏览器 “设置” --> “关于Chrome” 查看

Webdriver.exe下载地址:http://chromedriver.storage.googleapis.com/index.html

编写条件:

需掌握python基础、元素定位、三种等待方式、鼠标键盘事件、窗口切换等(多多益善)

三、初体验

1、实现用户登录:

 1 from time import sleep
 2 from selenium import webdriver
 3 from selenium.webdriver.common.by import By
 4 
 5 driver = webdriver.Chrome()
 6 driver.get(r'https://xxx')      # 打开浏览器并访问该链接,这里的链接不便展示哈
 7 driver.maximize_window()
 8 
 9 # 定位元素并操作
10 driver.find_element(By.NAME, 'username').send_keys('luoyang')
11 driver.find_element(By.NAME, 'password').send_keys('123456')
12 driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/form/button').click()
13 sleep(10)
14 
15 # 关闭并退出浏览器
16 driver.quit()
17 
18  
19 
20 # 关于close()和quit():close()只是关闭浏览器当前窗口,并不会退出浏览器
21 
22 # 当浏览器只有一个窗口时,使用close()虽然退出了浏览器,但驱动还在运行
23 
24 # 而quit()则会关闭所有窗口,清除session,并结束驱动运行

2、进一步实现,引入unittest框架

 1 from time import sleep
 2 from selenium import webdriver
 3 import unittest
 4 from selenium.webdriver.common.by import By
 5 
 6 
 7 class Login(unittest.TestCase):
 8 
 9     def setUp(self) -> None:
10         self.driver = webdriver.Chrome()
11         self.url = r'https://xxx'
12         self.driver.maximize_window()  # 最大化窗口
13         self.driver.get(self.url)
14 
15     def test_login(self, username='luoyang', password='123456'):
16         self.driver.find_element(By.NAME, 'username').send_keys(username)
17         self.driver.find_element(By.NAME, 'password').send_keys(password)
18         self.driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/form/button').click()
19 
20     def tearDown(self) -> None:
21         sleep(5)
22         self.driver.quit()
23 
24 
25 if __name__ == '__main__':
26     unittest.main()     # 执行测试

关于unittest框架详细学了之后再在其他篇章中发表…

四、POM设计模式

1、POM:

即page object model,页面对象模型,顾名思义,就是将每个页面当做一个对象来看待,将页面中需要操作的元素提取到这个对象中,此后每当要用到这些元素时,调用该对象即可。让我们来具体使用一下吧!

首先,我们先创建好结构:

all_case_run.py --模块,用于执行所有的测试类

|–common – 包,用于存放公用的工具类

|–universal_method.py – 通用工具类

|–case – 包,用于存放所有的测试类

|–test_login.py – 登录测试用例类

|–pages – 包,用于存放页面类及页面基类(basePage)

|–base_page.py – 所有页面对象都需继承该类,该类里封装了元素的定位、操作等方法

|–login_page.py – 登录页面类,该类包含了登录页面的元素、元素定位及操作逻辑等

|–data – 包,用于存放元素定位路径文件

|–login.yaml – yaml数据文件,用于存放登录页面的元素定位路径数据

|–report – 包,用于存放测试报告文件及日志文件(自动生成)

至此,一个简便的结构就创建好了。

2、 all_case.run.py内容:

 1 import time
 2 
 3 from BeautifulReport import BeautifulReport
 4 
 5 from GAD_webUI.commen.universal_method import UniversalMethod
 6 
 7 from GAD_webUI.commen.send_email import SendEmail
 8 
 9 
10 
11 if __name__ == '__main__':
12 
13 
14     print('用例开始执行-------------------')
15 
16     now = time.strftime('%Y-%m-%d_%H_%M_%S', time.localtime(time.time()))
17 
18     filename = 'D:\\testStudy\gitstudy\gitrepository\pythonstudy\pythonworkspace\GAD_webUI\\report'
19 
20     UniversalMeth
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值