GuardianAutoTest自动化测试框架介绍

 

  一、selenium

  selenium是一个开源的web ui自动化测试工具,详细就不再过多介绍了。

  二、环境搭建

  关于环境搭建,非常简单,此处不再赘述。

  三、po设计

  po(pom)模式:页面对象模型,把项目中的页面,封装成一个一个类,一个页面对应一个类。再通过实例化这个类的对象,去调用类里面的属性和方法。

  好处:

  提高代码维护

  代码重复利用

  3.1 po分层

  3.1.1 基础层:

  基础层:放封装的selenium基础方法

  代码实现:

 class BasePage:

      def __init__(self,driver):
          self.driver=driver
      # 打开页面
      def into_testin(self,url):
          self.driver.get(url)
      # 定位元素
      def locate_element(self,args):
          return self.driver.find_element(*args)
      #定位一组元素
      def locate_eles(self,args):
          return self.driver.find_elements(*args)
      #输入值
      def input_(self,args,text):
          self.locate_element(args).send_keys(text)
      #点击按钮
      def click_button(self,args):
          self.locate_element(args).click()

  3.1.2 页面对象层

  页面对象层:pageobject,存放页面的元素定位和操作流程

  登录模块代码实现:​​​​​​​

 from time import sleep
 from basepage.base_page import BasePage
 from selenium.webdriver.common.by import By

 class LoginPage(BasePage):
      '''定位页面元素'''
      
      #url
      testin_url='https://www.testin.cn/account/login.htm'
      
      #输入用户名和密码
      username_loc=(By.ID,'email')
      password_loc=(By.ID,'pwd')
      #点击登录按钮
      login_button=(By.ID,"submitBtn")
      #登录邮箱操作流程
      def testin_login(self,username='18170710339',password='Quyun1230'):
          self.into_testin(self.testin_url)
          sleep(2)
          self.locate_element(self.username_loc).send_keys(username)
          sleep(1)
          self.locate_element(self.password_loc).send_keys(password)
          sleep(1)
          self.click_button(self.login_button)

  选择手机代码实现:​​​​​​​

from time import sleep  
from basepage.base_page import BasePage  
from selenium.webdriver.common.by import By  
  
class SelectPage(BasePage):  
    '''定位页面元素'''  
    # 定位弹窗  
    win_loc = (By.XPATH, "//div[@class='modal-body']/i")  
    # 定位iphone  
    ip_12pro_loc = (By.XPATH, '//div[@id="collapse_1"]/div/dl[1]/dd/div/span[2]/label/span')  
    # 定位iphone12 pro max  
    ip_loc = (By.XPATH, "//button[@device-source='00008101-0004102C3468001E']")  
    # 定位品牌  
    an_loc = (By.XPATH, '//div[@id="collapse_1"]/div/dl[2]/dd/div/span[3]/label/span')  
    # 定位安卓魅族  
    mz_loc = (By.XPATH, "//button[@device-source='864968050654030']")  
    # 定位上市时间  
    onlin_loc = (By.XPATH, '//div[@id="collapse_1"]/div/dl[6]/dd/div/span[5]/label/span')  
    # 定位上市时间的华为荣耀  
    sj_loc = (By.XPATH, "//button[@device-source='7d22ebd8f913637d']")  
    # 定位文本框  
    text_detail = (By.XPATH, '//div[@id="modal_quota_alert"]/div/div/div[2]')  
    # 定位取消框  
    qx_but_loc = (By.XPATH, '//div[@id="modal_quota_alert"]/div/div/div[3]/button[1]')  
    # 点击登录按钮  
    login_button = (By.ID, "submitBtn")  
  
    # 登录邮箱操作流程  
    def testin_select_01_iphone(self):  
        sleep(1)  
        self.locate_element(self.ip_12pro_loc).click()  
        sleep(1)  
        self.locate_element(self.ip_loc).click()  
        sleep(1)  
        as_text = self.locate_element(self.text_detail).text  
        # 断言信息正确  
        assert as_text == u'您的配额已不足,是否前往购买?'  
        self.locate_element(self.qx_but_loc).click()  
        sleep(2)  
  
    def testin_select_02_android(self):  
        sleep(1)  
        self.locate_element(self.an_loc).click()  
        sleep(1)  
        self.locate_element(self.mz_loc).click()  
        sleep(1)  
        as_text = self.locate_element(self.text_detail).text  
        assert as_text == u'您的配额已不足,是否前往购买?'  
        self.locate_element(self.qx_but_loc).click()  
        sleep(2)  
  
    def testin_select_03_onlin_time(self):  
        sleep(1)  
        self.locate_element(self.onlin_loc).click()  
        sleep(1)  
        self.locate_element(self.sj_loc).click()  
        sleep(1)  
        as_text = self.locate_element(self.text_detail).text  
        assert as_text == u'您的配额已不足,是否前往购买?'  
        self.locate_element(self.qx_but_loc).click()  
        sleep(2)

  3.1.3 测试用例层

  测试用例层:存放测试用例及数据

  代码实现:​​​​​​​

import pytest  
from time import sleep  
from selenium import webdriver  
from common.excel import read_excel  
from pageobject.login_page import LoginPage  
from pageobject.select_phone import SelectPage  
  
class TestTestIn:  
    # 打开浏览器  
    def setup_method(self) -> None:  
        self.driver = webdriver.Chrome()  
  
    def teardown_method(self) -> None:  
        sleep(1)  
        self.driver.quit()  # 使用 quit() 而不是 close(),以确保完全关闭浏览器和所有窗口  
  
    '''利用excel导入登录测试数据'''  
    @pytest.mark.parametrize('case', read_excel('./data/data.xlsx', 'login'))  
    def test_01_login(self, case):  
        '''测试登录模块'''  
        xh, case_name, username, password, is_exc, result, bz = case  
        lp = LoginPage(self.driver)  
        lp.testin_login(username, password)  
        # 注意:这里可能需要添加一些断言来验证登录是否成功  
  
    def test_02_select_iphone_12(self):  
        '''测试根据品牌选择手机'''  
        lp = LoginPage(self.driver)  
        lp.testin_login()  # 假设这个函数不需要参数,或者它使用了某种默认登录信息  
        ps = SelectPage(self.driver)  
        ps.testin_select_01_iphone()  
  
    def test_03_select_androi_sys(self):  
        '''测试根据安卓系统选择手机'''  
        lp = LoginPage(self.driver)  
        lp.testin_login()  
        ps = SelectPage(self.driver)  
        ps.testin_select_02_android()  
  
    def test_04_select_online_time(self):  
        '''测试根据上市时间来选择手机'''  
        lp = LoginPage(self.driver)  
        lp.testin_login()  
        ps = SelectPage(self.driver)  
        ps.testin_select_03_onlin_time()  
  
# 注意:如果 LoginPage 和 SelectPage 的 testin_login 和 testin_select_xxx 方法中有断言,  
# 那么这些测试方法将会根据断言的结果来判定测试是否通过。  
# 如果这些方法中没有断言,那么测试将会直接通过,除非发生异常。

  3.1.4 创建测试数据

  登录模块,我们用到了数据驱动,我们先创建一个目录,如data,里面创建一个excel表,添加相应数据,如:

 

  excel表中如下:

图片

 

  3.1.5 创建读取excel目录

  创建一个common目录,再创建一个read_excel的文件:

  代码如下:​​​​​​​

  import openpyxl

  def read_excel(excel_dir,sheet_name):
      '''读取excel'''
      #加载目录
      ex=openpyxl.load_workbook(excel_dir)
      #获取sheet页
      sheet=ex[sheet_name]
      #打印表最大行和列
      # print(sheet.max_row,sheet.max_column)
      # print(sheet.cell(2,1).value)
      #循环行和列
      sheet_list=[]
      for row in range(2,sheet.max_row+1):
          row_list=[]
          for col in range(1,sheet.max_column+1):
              row_list.append(sheet.cell(row,col).value)
          sheet_list.append(row_list)
      return sheet_list
  if __name__ == '__main__':
      read_excel('../data/data.xlsx','login')

  3.2 生成测试报告

  3.2.1 创建报告目录

  本次我们使用pytest测试框架,所以,当然使用allure测试报告了。如果不熟悉allure报告的朋友,可以参考我上一篇详细的介绍:单元测试框架–pytest从入门到精通2021最新教程 先创建两个目录:一个临时目录:temp和存放测试报告的reports:

  3.2.2 创建报告配置文件

  新建一个pytest.ini的文件:​​​​​​​

 [pytest]
  #
  addopts=-vs --alluredir ./temp
  testpaths=./testcase
  python_files=test_*.py
  python_classes=Test*
  python_functions=test_*

  3.3 运行测试

  根据上面的操作,最终会形成这样的目录:

  3.3.1 运行用例:​​​​​​​

创建一个run_test.py文件:
import os
import pytest
from time import sleep


if __name__ == '__main__':
   pytest.main()
   sleep(2)
   os.system('allure generate ./temp -o ./reports --clean')

  3.3.2 查看运行结果

  3.3.2.1 编辑器中结果

  可以看出,结果全部运行通过。

  3.3.2.2 查看测试报告

  查看reports目录中的html测试,用浏览器打开:

  测试用例全部通过。

  四、jenkins集成

  如果不太熟悉jenkins的朋友,可以参考我之前的博客,有详细搭建教程:?jenkins持续集成的使用(含RF自动执行自动化)

  4.1 启动jenkins

  cmd中进入jenkins目录,执行命令:

  java -jar jenkins.war

  jenkins启动成功

  4.2 创建任务

  进入jenkins,创建一个任务:

 

  添加项目目录:

 

  设置运行命令:

 

  保存,创建成功。

  任务创建成功后, 执行运行操作。

 

  可以看到已经在运行了。

 

  查看运行结果:

  运行成功。测试报告,同上,就不再次看了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值