链接:https://blog.csdn.net/ak739105231/article/details/102409810说明了python实现web自动化测试的基本逻辑以及数据驱动层,简单的说就是如何将数据与业务分离,实现数据、脚本的维护更简洁。
1.定位符指的是定位web页面上特定元素的字符串。一般情况下,selenium定位方式有很多,但是对于一个测试脚本,建议全部都能统一为一种方式;这样方便脚本使用定位数据。推荐CSS,因为id、name、class都不能保证页面所有的元素都能使用这三种之一(简单的说,就是你不可能全部元素都能通过id或name来定位,因为有的元素没有id属性或name属性。甚则,class根本不唯一。),所以,本文章将以CSS的方式将定位符提取出来,作为独立的定位符驱动层。
2.定位驱动层与之前的数据驱动层形式基本一样。定位符驱动层主要的作用是把定位符内容与具体的代码进行分离。当某个页面元素的定位符需要更新时,只需要更新定位符驱动层的内容,而不需要修改任何代码。
同样,定位符驱动层的存储方式也有两个,分别是:本地文本存储、远程服务存储方式(之前数据驱动层说的数据库存储也是远程服务存储的一种)
1.1本地文件存储
定位符的本地文件存储方式也是有很多可选的,除了Python文件外,还有如同TXT、CSV、XML、JSON等格式可以选择。下面以CSV文件存储的形式来介绍定位符驱动层的提取与使用。
CSV(Comma-Separated Values)文件,又称:逗号分隔符文件;默认的CSV文件的每一行内容都是以逗号来分隔的;每一个小部分可以称之为列。
步骤1:准备在编写自动化脚本过程中需要使用到的定位符,想好合适的名称,存储在自己创建的csv文件中;
步骤2:编写读取csv文件的代码;
#!usr/bin/env python
# -*-coding:utf-8 -*-
'''
定位符读取
'''
import csv
def read_csv(file_path):
'''
读取csv里面的定位符
:param file_path:
:return: d
'''
csv_file = open(file_path,'r')
reader = csv.reader(csv_file)
d = {}
for line in reader:
if not line:
continue
if len(line) < 2:
d[line[0]] = '' #若该行自有key没有value,就赋值空
else:
d[line[0]] = line[1]
csv_file.close()
return d
步骤3:在脚本中调用读取csv的方法,在需要的时候使用
2.1远程服务存储
远程存储是相对于本地存储方式而言的,它可以在不同机器间进行共享。上面链接中的数据驱动层的第二种存储方式:数据库存储就是远程存储方式的一种,除此之外,还可以使用web service 的方式来提供远程存储服务。下面还是以数据库存储的方式来介绍远程服务存储。
在这之前,需要将数据库安装好,并且做相关修改,如:非本机访问的IP限制
访问链接:https://blog.csdn.net/ak739105231/article/details/102487921
一切准备好之后,接下来的步骤1:开始定位符表结果的设计。这里的表结果应该是与数据驱动层的表结果差不多。
CREATE TABLE `locator` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`module` varchar(255) NULL COMMENT '模块名' ,
`page` varchar(255) NOT NULL COMMENT '测试页名称' ,
`name` varchar(255) NOT NULL COMMENT '测试数据名' ,
`value` varchar(255) NOT NULL COMMENT '测试数据的值' ,
`desc` varchar(255) NULL DEFAULT NULL COMMENT '测试数据的描述' ,
`status` enum('inactive','active') NULL DEFAULT 'active' COMMENT '数据是否有效' ,
`createAt` date NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)ENGINE = INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
接下来准备好,定位符数据:
步骤2:编写获取数据库定位符的脚步,放置在一个py文件下;(与数据驱动层类似,查询字段更加具体情况变更)
步骤3:导入获取数据库定位符的方法,实例化,使用其中的值;
可以看出,脚本中关于数据已经基本上没有与代码太多纠缠。定位符、测试数据都各自来源于定位符驱动层、数据驱动层;更方便数据的变更,代码的管理。