一、UI自动化框架介绍

测试框架使用了Po设计模式(Page Object),每一个页面用一个类来对应,这个类里面要实现所有核心页面元素的获取方法,类里面提供操作页面元素的所有方法。
这个框架实现几点:
1.把常用的代码进行了封装,减少重复代码的编写。
比如说,操作excel 的方法,记录日志的方法,创建文件的方法,查找元素的方法,解析ini配置文件的方法,还有记录时间的方法,都进行封装,在使用时直接进行调用。
2.做到了测试程序和测试数据进行了分离。
3.做到了定位表达式和程序的分离。
4.易于维护
5.能够选择不同的测试数据进行执行
6.有测试报告
7.可以在异常的时候进行截屏操作
8.可以记录测试日志

二、框架的结构

1 配置信息:Conf

  日志的配置文件,框架工程的全局变量,其他配置

2 日志:Log

  执行的时候打印的日志

3 测试数据:TestData

  测试的excel文件,元素的定位表达式文件,其他测试数据

4 测试逻辑封装:Action

  基于你的测试逻辑或者场景通过常见测试步骤的封装,比如登录。

5 测试框架的核心代码:TestScript

  数据驱动中执行的测试步骤; 读取测试数据;执行测试脚本;收集测试结果;提供测试报告。

6 工程的全局封装:Util

   excel读取;日志的使用;日期的封装;目录的封装;页面元素获取的封装;配置文件读取的封装

7 PageObject (homepage 页面属于的结构) PageObject

目录结构如下:

三、代码说明

1、Conf\PageElementLocator.ini

[crm_login]
loginPage.username=xpath>//input[@id="txtUsername"]
loginPage.password=xpath>//input[@id="txtPassword"]
loginPage.loginbutton=xpath>//input[@type="submit"]

说明:

该文件的作用是实现定位表达式和程序的分离。让每个定位表达式有个名字,方便使用和管理。

用到哪个页面的元素就把对应的定义表达式更新到该文件中。
给每个页面起个名字,作为section的名字,[crm_login]:

   loginPage.username 是自己给每个元素取的名字;

  =xpath 表示用xpath定位;

  > 用于分割;

  //input[@id="txtUsername"]是xpath表达式

2、Conf\ProjVar.py

  放置当前工程路径;配置文件路径;数据文件路径;测试数据Excel列。

  代码举例:

import os

# 当前工程的路径
proj_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 配置文件的路径
PageElementLocator_file_path = os.path.join(proj_path,r"Conf\PageElementLocator.ini") # 数据文件的路径
test_data_file_path = os.path.join(proj_path,r"TestData\crm登录账号.xlsx") # "crm账号"sheet页名称
test_user_info_sheet = "crm账号"
# "crm账号"sheet页列表的名称
username_col = 1
password_col = 2
test_data_sheet_col = 3
execute_flag_col = 4
test_time_col = 5
test_user_info_result_col = 6 # "测试结果"sheet页名称
test_result_sheet = "测试结果"

3、Conf\Logger.conf

  记录日志的配置文件

  同时将生成的日志写入:Log\AutoTestLog.log 文件

4、PageObject\LoginPage.py

  负责实现po的内容,一个页面的所有操作,都写到一个类里面。
  举例:LoginPage.py 实现登录页面的PO
    get_login_link(self):获取要操作的链接元素
    click_login_link(self):点击这个链接元素的动作
    只写怎么操作页面元素,不写任何测试逻辑
  部分代码示例:
class loginPage():
def __init__(self,driver):
self.driver = driver def get_login_username(self):
input = read_ini_file_option(PageElementLocator_file_path,"crm_login","loginPage.username")
element = find_element(self.driver,input.split(">")[0],input.split(">")[1])
return element def input_login_username(self,username):
self.get_login_username().send_keys(username)

5、ScreenPics

  在代码中,断言失败或执行失败时,将当前页面截图,根据执行时间生成路径并保存截图。

6、TestData

  将需要测试的数据放到该文件夹下,根据excel中的数据执行自动化测试脚本。

7、TestScript

  该文件夹下的文件执行具体的测试步骤和用例。

  如:AddNewCaseTestScript.py 从TestData的excel中,读取测试数据,根据不同的测试数据创建case。

8、Util

  放配置文件,如常用的 获取时间,创建文件夹,读写Excel等文件封装好,放到这里。使用时直接调用。

  举例1:TakePic.py  截图配置文件

from Util.Dir import *
from selenium import webdriver def take_pic(driver):
file_path = make_time_dir()
pic_path = os.path.join(file_path, TimeUtil().get_chinesedatetime() + ".png")
try:
result = driver.get_screenshot_as_file(pic_path)
print(result)
except IOError as e:
print(e)

  举例2:ParseConfig.py 解析配置文件PageElementLocator.ini

#encoding=utf-8
# 解析配置文件 import configparser def read_ini_file_all_sections(ini_file_path):
'''拿到所有的section'''
cf = configparser.ConfigParser()
cf.read(ini_file_path,encoding="utf-8")
return cf.sections() def read_ini_file_section_all_options(ini_file_path,section_name):
'''拿到指定的section的所有名称'''
cf = configparser.ConfigParser()
cf.read(ini_file_path, encoding="utf-8-sig")
return cf.options(section_name) def read_ini_file_option(ini_file_path,section_name,option_name):
'''拿到指定section名称的值'''
cf = configparser.ConfigParser()
cf.read(ini_file_path, encoding="utf-8-sig")
try:
value = cf.get(section_name,option_name)
except:
print ("the specific seciton or the specific option doesn't exit!")
return None
else:
return value

  举例3:Dir.py 创建目录

def make_dir(dir_path):
if not os.path.exists(dir_path):
try:
os.makedirs(dir_path)
print("创建目录 %s 成功" %dir_path)
except:
print("创建目录 %s 不成功" %dir_path ) def make_time_dir():
date = TimeUtil().get_chinesedate()
dir_path = os.path.join(proj_path,"ScreenPics")
dir_path = os.path.join(dir_path,date)
dir_path = os.path.join(dir_path,str(TimeUtil().get_hour()))
make_dir(dir_path)
return dir_path

  其他常用的方法可根据项目的需求进行封装:

UI自动化测试框架:数据驱动的更多相关文章

  1. 数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

    UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程.以下是我之前写的一个自动化测试的小Demo.这个Demo基于Selenium与Java.由于现在Selenium在自动化测 ...

  2. UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)

    其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...

  3. 基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

  4. 自动化测试中级篇——LazyAndroid UI自动化测试框架使用指南

    原文地址https://blog.csdn.net/iamhuanggua/article/details/53104345 简介   一直以来,安卓UI自动化测试都存在以下两个障碍,一是测试工具Mo ...

  5. 简单Web UI 自动化测试框架 pyse

    WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...

  6. Ui自动化测试框架

    为了提高我们的UI测试效率,我们引用Ui自动化测试框架,这里简单先描述一下,后续会详细补充: 了解一个测试框架,我们就需要了解一下源码,能看懂源码即可: 1.稳定先封装wait EC,电脑性能配置较好 ...

  7. UI自动化测试框架 ---TestCafe

    UI自动化测试框架 ---TestCafe 官网文档链接: https://devexpress.github.io/testcafe/ https://devexpress.github.io/te ...

  8. UI自动化测试框架:关键字驱动+数据驱动

    1. 关键字驱动框架简介 2. 工程结构说明 3. 工程代码实现 action 包  page_action.py business_process 包 case_process.py data_so ...

  9. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  10. APP的UI自动化测试框架及平台化探索

    顾铮,10年+测试及测试开发相关经验,2014年加入京东,曾主导设计开发UI测试框架,参与CI测试平台建设,现负责iOS侧的工具,框架建设.在UI自动化,性能测试,单元测试方面有较深入研究,在App, ...

随机推荐

  1. Python 创建或读取 Excel 文件

    Excel是一种常用的电子表格软件,广泛应用于金融.商业和教育等领域.它提供了强大的数据处理和分析功能,可进行各种计算和公式运算,并能创建各种类型的图表和可视化数据.Excel的灵活性使其成为处理和管 ...

  2. 如何调用API接口获取商品数据

    在当今数字化的时代,电子商务的崛起使得网购成为了人们生活中不可或缺的一部分.作为电子商务中最为熟知和流行的平台之一,拥有大量的商品资源和用户群体.如果你是一名开发者或者是对数据分析感兴趣的人,你可能会 ...

  3. Ceph-部署

    Ceph规划 主机名 IP地址 角色 配置 ceph_controler 192.168.87.202 控制节点.MGR Centos7系统500G硬盘 ceph_node1 192.168.87.2 ...

  4. LSTM推导

    LSTM推导 forward propagation def lstm_cell_forward(xt, a_prev, c_prev, parameters): """ ...

  5. vue + canvas 实现九宮格手势解锁器

    前言 专栏分享:vue2源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位 ITer 关注点赞收藏 此篇文章用于记录柏成从零开发一个canvas九宮格手势解锁器的历程,最终效果如 ...

  6. .NET周刊【9月第2期 2023-09-10】

    国内文章 使用 OpenTelemetry 构建 .NET 应用可观测性(2):OpenTelemetry 项目简介 https://www.cnblogs.com/eventhorizon/p/17 ...

  7. Vue源码学习(七):合并生命周期(混入Vue.Mixin)

    好家伙,   1.使用场景 现在来,来想一下,作为一个使用Vue的开发者,假设现在我们要使用created(),我们会如何使用 1.1.  .vue文件中使用 <template> < ...

  8. CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥?

    对于iOS开发者而言,CocoaPods并不陌生,通过pod相关的命令操作,就可以很方便的将项目中用到的三方依赖库资源集成到项目环境中,大大的提升了开发的效率.CocoaPods作为iOS项目的包管理 ...

  9. 对某个接口进行限流 以 Aop 注解的形式绑定接口 用redis实现

    简单的针对某个接口进行限流,如果需要整体限流的话还是建议在网关上面或者服务器上面动手Controller: @LimitRequest(count = 1,time = 60 * 1000 * 2) ...

  10. gitbook生成静态页面不跳转

    gitbook页面不跳转 现在可以在localhost:4000/查看自己的网页了.而且生成的网页存在_book文件夹中,下次点击 _book文件夹中的index.html就能打开网页,内容无更新,就 ...