python+selenium+ddt测试登录页面(包括截图和断言)

ddt数据驱动,在做自动化测试的时候,很多时候是要用到ddt来传参数的
要做到代码与数据分离,就要用专门的文件来保存数据,不要把数据写进代码里,用excel表格来存登录要用到的数据,这里记录一下ddt数据驱动测试登录页面。

1.做个excel表记录用户名和密码

这里是用公司开发的系统来测试的,所以用户名和密码打码了,
建一个user.xlsx,写一下表头:username,pwd,如图,这边用了两组数据,真实测试的时候肯定不止两组数据
在这里插入图片描述

2.用openpyxl读写excel里的数据

这里建一个data.py的文件,用于读写excel
这边用的是openpyxl的库
首先安装openpyxl

pip install openpyxl

这边是要用字典的方式来记录这些用户名和密码,因为他们是一组组的数据
代码如下:
要用类和方法的方式,便于其他文件的调用
这里返回的listdata是字典的集合

import openpyxl
class Data():
    def openData(self):
        wk = openpyxl.load_workbook("user.xlsx")
        sheet1 = wk['Sheet1']
        listdata = []
        for x in range(2, sheet1.max_row + 1):
            dict1 = {}
            for y in range(1, sheet1.max_column + 1):
                value = sheet1.cell(x, y).value
                dict1[sheet1.cell(1, y).value] = value
            listdata.append(dict1)
        return listdata

openpyxl读写excel就不多赘述,可以看文档学习一下

3.编写登录页面的unittest,加上截图和断言

我们一般登录,输入url,用户名和密码,点击登录按钮即可
如下图所示

def test_login(self):
    self.driver = webdriver.Chrome()
    self.driver.get("url") #url是要登陆的系统
    self.driver.find_element_by_id('userName').send_keys('username')
    self.driver.find_element_by_id('passWord').send_keys('password')
    self.driver.find_element_by_xpath("/html/body/div/div/div/div[2]/div/form/div[4]/div/div/span/button").click()
    time.sleep(1)

这里要换的只是用户名和密码的输入
这时候用到ddt这个数据驱动,就可以很好的把数据传入进去
导库

from ddt import ddt,data

使用ddt里的data模块来传入数据

@ddt #装饰类
class MyTestCase(unittest.TestCase):
    @data(('user1','password1'),('user2','password2'))
    def test_login(self,data):

这里用的是直接把数据写入到代码里了,没有做到数据和代码分离,所以就要使用我们刚刚建好的excel文档

import unittest
from selenium import webdriver
from ddt import ddt,data
from data import Data
import time
@ddt
class TestLogin(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Chrome()

    def tearDown(self) -> None:
        self.driver.quit()

    @data(*Data().openData())
    def test_login(self,dic):        
        self.driver.get("url") #系统的url
        self.driver.find_element_by_id('userName').send_keys(dic['username'])
        self.driver.find_element_by_id('passWord').send_keys(dic['pwd'])
        self.driver.find_element_by_xpath("/html/body/div/div/div/div[2]/div/form/div[4]/div/div/span/button").click()
        time.sleep(1)

这里就引入了刚刚编写的Data里的方法openData,然后用字典值key的方法来取得要用的用户名和密码

因为我测试的系统是做了权限的,所以不同权限的用户名登录进去看到的页面不一样,所以我要截图下来看看是否满足
这里用到了save_screenshot方法,只需要传入图片路径就好
save_screenshot(self, filename)
我是存在桌面的,并用了用户名来区分

#截图
pic_path = ("C:\\Users\\xiaozhouzou\\Desktop\\"+dic['username']+".png")
self.driver.save_screenshot(pic_path)

加入断言,登录页面一般登录进入就进入了系统的首页面,所以URL会变化,这里可以用页面当前url来判断是否登录成功
注意:这时候需要等待时间
time.sleep(1)

我刚开始就遇到了这个坑,没有写等待时间,导致断言失败,页面当前url一直是登录的url

self.assertIn('welcome',self.driver.current_url)

testlogin.py的完整代码:

import unittest
from selenium import webdriver
from ddt import ddt,data
from data import Data
import time
@ddt
class TestLogin(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Chrome()

    def tearDown(self) -> None:
        self.driver.quit()

    @data(*Data().openData())
    def test_login(self,dic):
        self.driver.get("url") #这里没写url
        self.driver.find_element_by_id('userName').send_keys(dic['username'])
        self.driver.find_element_by_id('passWord').send_keys(dic['pwd'])
        self.driver.find_element_by_xpath("/html/body/div/div/div/div[2]/div/form/div[4]/div/div/span/button").click()
        time.sleep(3)
        #截图
        pic_path = ("C:\\Users\\xiaozhouzou\\Desktop\\"+dic['username']+".png")
        self.driver.save_screenshot(pic_path)
        self.assertIn('welcome',self.driver.current_url)


if __name__ == '__main__':
    unittest.main()

然后运行
在这里插入图片描述
在桌面上可以看到两个登录完毕的截图

还可以用HTMLTestRunner来生成测试报告,之前的博客写过如何生成测试报告,这里就不写了。

以上,就是写的测试登录页面的代码,写的比较简单
要用selenium做自动化测试,肯定是要用框架来封装的

猜你喜欢

转载自blog.csdn.net/shenshenruoxi/article/details/106753647
今日推荐