lsekfe 发表于 2022-7-8 10:18:38

使用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]
查看完整版本: 使用selenium测试自己项目的登录界面