数据驱动---TXT
一,背景
测试数据的准备在测试工作中非常重要。无论是手工测试,还是自动化测试;无论是GUI测试,还是API测试;无论是功能测试,还是性能测试,都避不开它。要成为一名优秀的测试工程师,数据准备的技能必须要掌握,这里就简单介绍一下文本文件的读写,并结合自动化测试示例进行演示。
二、文件读写
在之前的《python语言IO编程》文章已经详细说明了,文本文件的读写操作,这里再对关键知识点进行简单复习,也可以回顾之前的文章。python语言IO编程:https://www.jianshu.com/p/7447a7fec866
1、文件读写的模式
方法 | 含义 | 解释 |
---|---|---|
r | read | 读取(默认) |
w | write | 截断写入 |
a | append | 在原内容后追加写入 |
x | exclusive | 独占写入,文件存在会报错 |
b | binary | 二进制模式 |
t | text | 文本模式(默认) |
+ | 扩展 | 扩展为读写模式 |
2、文件读写方法
方法 | 作用 |
---|---|
read([size]) | 读取指定字节的内容 |
readline([size]) | 读取一行内容 |
readlines([size]) | 读取多行内容,返回列表 |
write(s) | 写入字符串 |
writelines(s) | 写入数据,支持字符串也支持列表 |
tell() | 获取当前文件位置 |
seek(n) | 移动文件位置 |
close() | 关闭文件 |
3、文件读方法详解
read方法:读取指定字节的内容,显示的是字符串。
with open('text.txt',mode='r',encoding='utf-8') as f:
print(type(f.read()))
f.seek(0)#文件指针回到初始位置
print("读取到的内容为:",f.read())
<class 'str'>
读取到的内容为: hello world!这是追加的内容
123
456
789
readlines方法:读取多行内容,返回的是列表。
with open('text.txt',mode='r',encoding='utf-8') as f:
print(type(f.readlines()))
f.seek(0)#文件指针回到初始位置
print("读取到的内容为:",f.readlines())
<class 'list'>
读取到的内容为: ['hello world!这是追加的内容\n', '123\n', '456\n', '789']
readline方法:读取一行内容。
with open('text.txt',mode='r',encoding='utf-8') as f:
print(type(f.readline()))
f.seek(0)#文件指针回到初始位置
print("读取到的内容为:",f.readline())
<class 'str'>
读取到的内容为: hello world!这是追加的内容
三、示例
这里还是以新浪邮箱为例。首先,创建一个TestData.txt的文本文件,保存测试数据。
TestData.txt:每行数据代表一条测试用例所需数据,分别用逗号分隔,代表:username、password、result。
,123456,请输入邮箱名
, ,请输入邮箱名
123456,123456,您输入的邮箱名格式不正确
123456@sina.com,123456,登录名或密码错误
test_txt_mail.py
import unittest
from selenium import webdriver
import time
def testdata(index):
'''测试数据'''
with open('TestData.txt','r') as fp:
data = fp.readlines()#读取文本文件数据
new_data = data[index].strip().split(',')#将字符串末尾\n去掉,再用‘,’分割信息
return new_data
class MyMailLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get('https://mail.sina.com.cn/')
self.driver.implicitly_wait(30)
def mail_login(self,username,password):
'''登录邮箱'''
self.driver.find_element_by_id('freename').clear()
self.driver.find_element_by_id('freename').send_keys(username)
self.driver.find_element_by_id('freepassword').clear()
self.driver.find_element_by_id('freepassword').send_keys(password)
self.driver.find_element_by_link_text('登录').click()
def error_info(self):
'''定位提取登录错误提示信息'''
freeError = self.driver.find_element_by_xpath('//div[@class="freeError"]//span').text
return freeError
def test_username_null(self):
'''测试登录邮箱:用户名为空'''
self.mail_login(testdata(0)[0],testdata(0)[1])
self.assertEqual(self.error_info(),testdata(0)[2])
def test_username_and_password_null(self):
'''测试登录邮箱:用户名及密码为空'''
self.mail_login(testdata(1)[0], testdata(1)[1])
self.assertEqual(self.error_info(), testdata(1)[2])
def test_username_error(self):
'''测试登录邮箱:用户名错误'''
self.mail_login(testdata(2)[0], testdata(2)[1])
self.assertEqual(self.error_info(), testdata(2)[2])
def test_password_error(self):
'''测试登录邮箱:密码错误'''
self.mail_login(testdata(3)[0], testdata(3)[1])
time.sleep(3)
self.assertEqual(self.error_info(), testdata(3)[2])
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)
结果:
test_password_error (__main__.MyMailLogin)
测试登录邮箱:密码错误 ... ok
test_username_and_password_null (__main__.MyMailLogin)
测试登录邮箱:用户名及密码为空 ... ok
test_username_error (__main__.MyMailLogin)
测试登录邮箱:用户名错误 ... ok
test_username_null (__main__.MyMailLogin)
测试登录邮箱:用户名为空 ... ok
----------------------------------------------------------------------
Ran 4 tests in 31.255s
OK