数据驱动---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
posted @ 2020-02-25 23:28  xyztank  阅读(119)  评论(0编辑  收藏  举报