Pythonセレンの自動化、データ駆動型+キーワード駆動型の方法

'''
以下为测试步骤,文件存放路径为:e:\\step.txt
open_browser||${browser_name}
visit||${url}
sleep||3
assert_word||${assert_word}
quit
'''

'''
以下为测试数据,文件中必须用双引号,文件存放路径为:e:\\data.txt
{"browser_name":"chrome","url":"https://www.baidu.com","assert_word":"百度"}
{"browser_name":"ie","url":"https://www.souhu.com","assert_word":"搜狐"}
{"browser_name":"firefox","url":"https://www.sougou.com","assert_word":"搜狗"}
'''

from selenium import webdriver
import sys
import time
import json
import re

driver='' #类变量、全局变量,存放获取到的浏览器驱动,以便其他函数使用

def get_test_data(test_data_file_path): #获取测试数据
    test_datas=[]
    with open(test_data_file_path,'r',encoding='utf-8') as fp:
        for data in fp:
            test_datas.append(json.loads(data.strip())) #将测试数据中的json串转换为字典存入test_datas
    return test_datas
    
def get_test_step_data(test_step_data_file_path): #获取测试步骤
    test_step_data=[] #存放步骤的列表
    with open(test_step_data_file_path,'r',encoding='utf-8') as fp: #读取测试步骤
        for data in fp:
            if len(data.split('||'))==2: #判断读取的每行数据切割后是否为两个
                action=data.split('||')[0].strip() #获取该行切割后的第一个数据,并去除前后空格
                value=data.split('||')[1].strip() #获取改该行切割后的第二个数据,并去除前后空格
                test_step_data.append([action,value]) #将获取到的该行数据以列表的形式存入test_data列表中
            elif len(data.split('||'))==1: #当等于一时,表示该步骤不需要参数
                action=data.strip()
                test_step_data.append([action])
            else: #如果切割后的数据不规范,则数据格式错误
                print('此行测试数据格式不正确:%s' %data)
    return test_step_data #将测试数据返回
    
def open_browser(browser_name): #根据测试数据获取指定浏览器的驱动
    global driver #全局变量使用方法
    if 'ie' in browser_name:
        driver=webdriver.Ie() #将获取到的浏览器驱动存入全局变量中
    elif 'chrome' in browser_name:
        driver=webdriver.Chrome()
    elif 'firefox' in browser_name:
        driver=webdriver.Firefox()
    else:
        print('不支持该浏览器:%s' %browser_name)
        exist()
    driver.set_page_load_timeout(10) #设置超时时间,如果访问网页时间超过10秒就报错
    return driver #返回驱动
    
def visit(url): #访问网址,获取网页数据url
    global driver
    try:
        driver.get(url) #访问网址,获取网页数据url
    except TimeoutException:
        print('网页访问超时')
    
def sleep(times): #等待时间函数
    try:
        times=int(times) #字符串转换为数字
    except:
        times=3
    time.sleep(times)
    
def assert_word(key_word): #断言网页数据中是否包含指定的关键字key_word
    global driver
    try:
        assert key_word in driver.page_source #断言网页源码中是否包含指定关键字
    except AssertionError:
        print(key_word,'关键字断言失败')
    except Exception as e:
        print('出现了其他异常',e)
    else:
        print(key_word,'关键字断言成功')

def quit(): #关闭浏览器
    global driver
    driver.quit()

test_datas=get_test_data('e:\\data.txt') #获取数据
test_steps=get_test_step_data('e:\\step.txt') #获取步骤
for test_data in test_datas: #先遍历每一行的数据
    for test_step in test_steps: #遍历步骤,将每行的数据都执行所有步骤
        if len(test_step)==2: #如果等于2,表示该步骤有参数
            action=test_step[0] #获取步骤名
            value=test_step[1] #获取步骤参数
            if re.search(r'\$\{.*\}',value): #如果步骤参数能匹配到${.*},name将该参数替换为对应的测试数据
                value_name=re.search(r'\$\{(.*)\}',value).group(1) #将步骤中的参数名取出
                value=test_data[value_name] #将步骤中的参数名作为字典的key,去测试数据中取出对应的数据
            command="%s('%s')" %(action,value) #将动作和数据组合成函数字符串
        elif len(test_step)==1: #如果等于1,表示该步骤没有参数
            action=test_step[0]
            command='%s()' %action
        eval(command) #执行函数字符串
print('测试完成')

おすすめ

転載: blog.csdn.net/weixin_44123630/article/details/113819435