使用selenium测试自己项目的登录界面
Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上。Selenium Core由一种指定格式的HTML文件驱动,在一定程度上增强了测试套件(Test Suite)的可读性。Selenium Remote Control允许测试人员使用常见的语言(自然包括C#等.NET语言)编写测试代码,并支持不同操作系统下的各种主流浏览器。Selenium Grid的作用是将测试分发至多台机器,这样便可大大加快测试速度。与WatiN相同,Selenium也是一款同样使用Apache License 2.0协议发布的开源框架。特点:
·开源,免费;
· 多浏览器支持:Firefox、Chrome、IE、Opera、Edge;
· 多平台支持:Linux、Windows、MAC;
· 多语言支持:Java、Python、Ruby、C#、JavaScript、C++;
· 对…出页面有良好的支持;
· 简单(API简单)、灵活(用开发语言驱动> ;
· 支持分布式测试用例执行;
使用selenium测试博客园cnblogs的登录界面:
一:功能测试
1.用户名为空 或 用户名密码均为空;
2.用户名或密码错误;
3.用户名存在、密码为空;
4.用户名和密码均正确。
步骤:
(一)登录方法
1.把输入账号、输入密码、点击登录按钮三个步骤写成一个方法;
2.然后把输入的账号和密码参数化。
import unittest
import selenium
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
class LoginCase(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Chrome()
self.dr.maximize_window()
#定义登录方法
def login(self, username, password):
self.dr.get('https://')#登陆页面网址
self.dr.find_element(By.ID,'u').send_keys(username)#各网站ID名不同,相同网站也有更新,以实际情况定位
self.dr.find_element(By.ID,'p').send_keys(password)
self.dr.find_element(By.ID,'login_button').click()(二)用例
1.下面的用例可以调用前面写的登录方法,这样不用每次都去走登录流程;
2.判断是否登录成功,我这里是取的登录成功后的账户名。
def test_login_success(self):
'''用户名、密码正确'''
self.login('程序猿-007', '0000000000a') #正确用户名和密码
link = self.dr.find_element(By.ID, 'header_user_left')
# 用assertTrue(x)方法来断言bool(x) is True 获取一条只有登陆成功才有的text,用来判断是否真的登陆成功
self.assertTrue('欢迎你,程序猿-007' in link.text)
# 截图可自定义截图后的保存位置和图片命名
self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_success.png')
def test_login_pwd_error(self):
'''用户名正确、密码不正确 或 用户名错误、密码正确'''
self.login('程序猿-007', '000')#正确用户名,错误密码
sleep(10)
error_message = self.dr.find_element(By.CSS_SELECTOR,'div.error-message').text
# 用assertIn(a,b)方法来断言 a in b'用户名或密码错误'在error_message里
self.assertIn('用户名或密码错误', error_message)
self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_error.png')
def test_login_pwd_null(self):
'''用户名正确、密码为空'''
self.login('程序猿-007', '')#密码为空
error_message = self.dr.find_element(By.ID,'mat-error-1').text
# 用assertEqual(a,b)方法来断言a == b请输入密码等于error_message
self.assertEqual(error_message,'请输入密码')
self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_null.png')
def test_login_user_null(self):
'''用户名为空、密码正确'''
self.login('', '0000000000a')#用户名为空,密码正确 或 用户名密码均为空
error_message = self.dr.find_element(By.ID,'mat-error-0').text
self.assertEqual(error_message,'请输入登录用户名或邮箱')#用assertEqual(a,b)方法来断言a == b
self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_user_null.png'
def tearDown(self):
sleep(2)
print('自动测试完毕!')
self.dr.quit()
if __name__ == '__main__':
unittest.main()结果:
二:界面测试(UI Test)
1.布局合理,testbox和按钮的长度,高度复合要求;
2.界面的设计风格与UI的设计风格统一;
3.界面中的文字简洁易懂,没有错别字。
三:安全性测试(Security test) 1.错误登陆的次数限制(防止暴力破解)
import itertools
#迭代器,用来生成密码
passwd = ("".join(x) for x in itertools.product("0a", repeat=10)) #迭代器,生成密码
def test_violenceLogin(self):
#测试错误登陆的次数限制(防止暴力破解)
while True:
# 先直接实现,然后再添加异常
try:
str = next(passwd)
print(str)
self.login('1060267971', str)
#print("86864733"+str)
sleep(1)
link = self.dr.find_element(By.CSS_SELECTOR, 'img.avatar-img')
print(link.text)
if('你好,'+str in link.text):
break
except StopIteration as e:
continue
except selenium.common.exceptions.ElementNotInteractableException as e2:
continue
except selenium.common.exceptions.NoSuchElementException as e3:
continue
print("密码已破解:" + str)
sleep(100)
结果:
博客园登录没有防破解
四:兼容性测试(Compatibility Test)
1.主流的浏览器下能显示正常以及功能正常;(IE,6,7,8,9, Firefox, Chrome, Safari,等)
2.在相同浏览器的不同版本正常显示。
页:
[1]