Python自学及心得

5)自动化测试模型

2022-08-22  本文已影响0人  Jeff_9021

一、库

是代码集合;

面向对象的代码集合形成的库,为类库;

面向过程的为函数库;

WebDriver库,提供了一组操作Web页面的方法与类。(Web自动化测试库)

二、框架

为了解决一个或一类问题;unittest框架主要用于测试用例的组织和执行,以及测试结果的生成,帮助完成测试工作。

三、工具

封装,屏蔽底层代码,例如:QTP

四、模型

module.py

# -*- coding:utf-8 -*-

class Mail:

    def __init__(self, driver):

        self.driver = driver

    def login(self, username, password):

            """登录"""

            self.driver.find_element_by_name("email").clear()

            self.driver.find_element_by_name("email").send_keys("username")

            # 输入密码

            self.driver.find_element_by_name("password").clear()

            self.driver.find_element_by_name("password").send_keys("password")

            # 点击登录

            self.driver.find_element_by_id("dologin").click()

    def logout(self):

            """登出"""

            pass

# -*- coding:utf-8 -*-

from time import sleep

from selenium import webdriver

from webdriver_manager.chrome import ChromeDriverManager

from module import Mail

'''

自动化测试模型:模块化+参数化

模块化:把重复的操作单独封装成公共模块;

参数化:把测试数据参数化'''

# 登录邮箱为例

# 打开浏览器,输入网站地址

# driver = webdriver.chrome()

driver = webdriver.Chrome(ChromeDriverManager().install())

driver.get("https://email.163.com/")

sleep(2)

"""

# 输入账号driver.find_element_by_name("email").clear()

driver.find_element_by_name("email").send_keys("admin")

# 输入密码driver.find_element_by_name("password").clear()

driver.find_element_by_name("password").send_keys("admin123")

# 点击登录driver.find_element_by_id("dologin").click()

sleep(5)

# 退出登录#driver.find_element_by_name

#退出浏览器driver.quit()

"""

# 调用Mail类并接收driver驱动

mail = Mail(driver)

# 登录成功

mail.login("admin", "admin123")

'''如何实现下面的多个场景 ???'''

# mail.login("", "")  # 登录账号为空

# mail.login("", "password") # 账号为空

# 登录之后的动作

sleep(5)

# 退出

mail.logout()

# 退出浏览器

driver.quit()

五、读取数据文件

测试数据放到数据文件中,常见数据文件的读取方法如下:

1)读取 txt 文件

常用方法:

read(): 读取整个文件

readline():读取一行数据

readlines(): 读取所有行的数据

实例:

# -*- coding:utf-8 -*-

'''需要优化为读取配置通用脚本'''

# 读取文件

with(open("./data_file/user_info.txt", "r")) as user_file:

data = user_file.readlines()

# 对文件内容进行格式化处理成数组类型

users = []

for line in data:

# [:-1]对字符串进行切片,去掉最后一个字符,因为每行结尾都有一个换行符”\n“

    user = line[:-1].split(":")

    users.append(user)

# 调试一下,打印出来

print(users)

2)读取CSV文件

# -*- coding:utf-8 -*-

import csv

import codecs

from itertools import islice

# 读取本地CSV文件

'''

1、通过codecs的open()方法,在打开文件时指定编码类型;2、通过CSV模块的reader()方法读取文件,避免中文乱码'''

data = csv.reader(codecs.open('./data_file/user_info.csv', 'r', 'utf_8_sig'))

# 仍存在问题:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte

换成 gbk 编码类型 可解决

# 存放用户数据

users = []

# 循环输出每行信息

'''

1、itertools模块提供了用于操作迭代对象的函数islice()

2、islice()第一个参数指定迭代对象,第二个参数指定迭代的位置,第三个参数表示结束位。'''

for line in islice(data, 1, None):

users.append(line)

# 输出调试一下

print(users)

3)读取json文件

import json

with open("./data_file/user_info.json", 'r') as f:

    data = f.read()

user_list = json.loads(data)   #为何使用loads()方法???

print(user_list)

4)读取xml文件

from xml.dom.minidom import parse

# 打开xml文件

dom = parse('./data_file/config.xml')

# 获得文档元素对象

root = dom.documentElement

# 获取一组标签

tag_name = root.getElementsByTagName("platform")

# 第一种:获取标签对之间的数据

data = tag_name[0].firstChild.data

print(data)

# 第二种:获取标签的属性值

log_info = root.getElementsByTagName("login")

# 获取第一个login标签的username属性值

username = log_info[0].getAttribute('username')

print(username)

password = log_info[0].getAttribute('password')

print(password)

# 获取第二个login标签的username属性值

username = log_info[1].getAttribute('username')

print(username)

上一篇 下一篇

猜你喜欢

热点阅读