51Testing软件测试论坛

标题: 使用selenium测试自己项目的登录界面 [打印本页]

作者: lsekfe    时间: 2022-7-8 10:18
标题: 使用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.然后把输入的账号和密码参数化。

  1. import unittest
  2.   import selenium
  3.   from selenium.webdriver.common.by import By
  4.   from selenium import webdriver
  5.   from time import sleep
  6.   class LoginCase(unittest.TestCase):
  7.        def setUp(self):
  8.           self.dr = webdriver.Chrome()
  9.           self.dr.maximize_window()
  10.        #定义登录方法
  11.        def login(self, username, password):
  12.            self.dr.get('https://')  #登陆页面网址
  13.            self.dr.find_element(By.ID,'u').send_keys(username)  #各网站ID名不同,相同网站也有更新,以实际情况定位
  14.            self.dr.find_element(By.ID,'p').send_keys(password)
  15.            self.dr.find_element(By.ID,'login_button').click()
复制代码
(二)用例
     1.下面的用例可以调用前面写的登录方法,这样不用每次都去走登录流程;
     2.判断是否登录成功,我这里是取的登录成功后的账户名。
  1. def test_login_success(self):
  2.            '''用户名、密码正确'''
  3.            self.login('程序猿-007', '0000000000a') #正确用户名和密码
  4.            link = self.dr.find_element(By.ID, 'header_user_left')
  5.            # 用assertTrue(x)方法来断言  bool(x) is True 获取一条只有登陆成功才有的text,用来判断是否真的登陆成功
  6.            self.assertTrue('欢迎你,程序猿-007' in link.text)
  7.            # 截图  可自定义截图后的保存位置和图片命名
  8.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_success.png')
  9.        def test_login_pwd_error(self):
  10.            '''用户名正确、密码不正确 或 用户名错误、密码正确'''
  11.            self.login('程序猿-007', '000')  #正确用户名,错误密码
  12.            sleep(10)
  13.            error_message = self.dr.find_element(By.CSS_SELECTOR,'div.error-message').text
  14.            # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里
  15.            self.assertIn('用户名或密码错误', error_message)
  16.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_error.png')
  17.        def test_login_pwd_null(self):
  18.            '''用户名正确、密码为空'''
  19.            self.login('程序猿-007', '')  #密码为空
  20.            error_message = self.dr.find_element(By.ID,'mat-error-1').text
  21.            # 用assertEqual(a,b)方法来断言  a == b  请输入密码等于error_message
  22.            self.assertEqual(error_message,'请输入密码')
  23.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_null.png')
  24.        def test_login_user_null(self):
  25.            '''用户名为空、密码正确'''
  26.            self.login('', '0000000000a')  #用户名为空,密码正确 或 用户名密码均为空
  27.            error_message = self.dr.find_element(By.ID,'mat-error-0').text
  28.            self.assertEqual(error_message,'请输入登录用户名或邮箱')  #用assertEqual(a,b)方法来断言  a == b
  29.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_user_null.png'
  30.        def tearDown(self):
  31.            sleep(2)
  32.            print('自动测试完毕!')
  33.            self.dr.quit()
  34.   if __name__ == '__main__':
  35.       unittest.main()
复制代码
结果:
[attach]138867[/attach]
[attach]138868[/attach]
[attach]138869[/attach]
[attach]138870[/attach]
二:界面测试(UI Test)  
  1.布局合理,testbox和按钮的长度,高度复合要求;  
  2.界面的设计风格与UI的设计风格统一;  
  3.界面中的文字简洁易懂,没有错别字。
[attach]138871[/attach]
三:安全性测试(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)

结果:
  博客园登录没有防破解
[attach]138872[/attach]
四:兼容性测试(Compatibility Test)
  1.主流的浏览器下能显示正常以及功能正常;(IE,6,7,8,9, Firefox, Chrome, Safari,等)
  2.在相同浏览器的不同版本正常显示。










欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2