007 selenium 单元测试/unittest/禅道测试

'''
时间:2018/12/05
功能:单元测试/unittest/禅道测试
目录:
    一: 单元测试
        1 测试代码
    二: unittest
        1 执行流程
        2 断言使用
        3 __main__ 
    三: 禅道测试
        1 普通测试
        2 unittest 
    四: 未解决
五: 思考
'''

一: 单元测试
  1 测试代码

def add(a, b):
    c = a + 2 * b
    return c


if __name__ == "__main__":
    d = add(2, 2)
    print(d)

二: unittest
  1 执行流程

# coding:utf-8
import unittest

class A8(unittest.TestCase):
    def setUp(self):
         print("setUp")
    def tearDown(self):
         print("tearDown")

    @classmethod
    def setUpClass(cls):
        print("setUpClass")
    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

    def testAdd(self):  # test method names begin with 'test'
        print("testAdd")
        self.assertEqual((1 + 2), 3)
        self.assertEqual(0 + 1, 1)
    def testMultiply(self):
        print("testMultiply")
        self.assertEqual((0 * 10), 0)
        self.assertEqual((5 * 8), 40)
    def testAsd(self):
        print("testAsd")
        self.assertEqual((1 + 1), 2)
        self.assertEqual((1 + 1), 2)

if __name__ == '__main__':
    unittest.main()
Testing started at 18:13 ...
setUpClass
setUp
testAdd
tearDown
setUp
testAsd
tearDown
setUp
testMultiply
tearDown
tearDownClass
每次用例 - 最先执行: def setUp(self):
每次用例 - 最后执行: def tearDown(self):

所有用例 - 最先执行一次: def setUpClass(cls):
所有用例 - 最后执行一次: def tearDownClass(cls):

class和用例执行顺序排序: 大写字符(A-Z),小写字母(a-z), 数字(0-9)

  2 断言使用

常用断言
    assertTrue         条件为真    
    assertFalse        条件为假
    
    assertEqual        数字相同
    assertNotEqual     数字不同
    
    assertIn        字符串 - 包含
    assertNotIn     字符串 - 不包含
    
    self.assertIsNone(x)    #判断为空
    self.assertIsNotNone(x)    #判断不为空
    
    所有的测试结果判断,都可以用True和False来判断。 

  3 __main__

    (1) 没有 -  if __name__ == "__main__":

def add(a, b):
    c = a + 2 * b
    return c

d = add(2, 2)
print(d)

1 : 保存为: t001_test_unittest.py

import t001_test_unittest

a = t001_test_unittest.add(4, 4)
print(a)

print(t001_test_unittest.__name__)

1 : 保存为: t002_test_main.py

2 : 执行t002_test_main.py 

4
12
t001_test_unittest

    (2) 使用 -  if __name__ == "__main__":

def add(a, b):
    c = a + 2 * b
    return c

if __name__ == "__main__":
    d = add(2, 1)
    print(d)

1 : 保存为: t001_test_unittest.py

import t001_test_unittest

a = t001_test_unittest.add(4, 4)
print(a)

print(t001_test_unittest.__name__)

1 : 保存为: t002_test_main.py

2 : 执行t002_test_main.py 

12
t001_test_unittest

三: 禅道测试
  1 普通测试

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("http://127.0.0.1/zentao")
time.sleep(1)

# 登录禅道
driver.find_element_by_id("account").send_keys("admin")
driver.find_element_by_name("password").send_keys("1234567")
driver.find_element_by_id("keepLoginon").click()
driver.find_element_by_id("submit").click()
time.sleep(1)


# 判断登录
try:
    text = driver.find_element_by_css_selector("#userMenu>a").text
    print("登录成功")
except:
    print("登录失败")


# 退出程序
driver.quit()

  2 unittest

# coding:utf-8
from selenium import webdriver
import time
import unittest

class LoginTest(unittest.TestCase):
    '''登录类的案例'''
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()   # 编辑器问题

    def setUp(self):
        self.driver.get("http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html")

    def tearDown(self):
        self.is_alert_exist()
        self.driver.delete_all_cookies() # 退出登录
        self.driver.refresh()

    def get_login_username(self):
        try:
            t = self.driver.find_element_by_css_selector("#userMenu>a").text
            print(t)
            return t
        except:
            return ""

    def is_alert_exist(self):
        '''判断alert是不是在'''
        try:
            time.sleep(2)
            alert = self.driver.switch_to.alert
            text = alert.text
            alert.accept() # 用alert 点alert
            return text
        except:
            return ""

    def test_01(self):
        '''登录成功的案例'''
        time.sleep(2)
        self.driver.find_element_by_id("account").send_keys("admin")
        self.driver.find_element_by_name("password").send_keys("123456")
        self.driver.find_element_by_id("submit").click()
        # 判断是否登陆成功
        time.sleep(3)
        t = self.get_login_username()
        print("获取的结果:%s"%t)
        self.assertTrue("admin" == t)

    def test_02(self):
        '''登录失败的案例'''
        time.sleep(2)
        # 错误账号和密码
        self.driver.find_element_by_id("account").send_keys("admin1112")
        self.driver.find_element_by_name("password").send_keys("")
        self.driver.find_element_by_id("submit").click()
        # 判断是否登陆成功
        time.sleep(3)
        t = self.get_login_username()
        print("登录失败,获取结果:%s"%t)
        self.assertTrue("" == t)  # 断言失败截图


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

四: 未解决

禅道登录失败情况,获取错误信息失败。
from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("http://127.0.0.1/zentao")
time.sleep(1)

# 登录禅道
driver.find_element_by_id("account").send_keys("admin")
driver.find_element_by_name("password").send_keys("1234567")
driver.find_element_by_id("keepLoginon").click()
driver.find_element_by_id("submit").click()
time.sleep(1)

# 判断登录
try:
    text = driver.find_element_by_css_selector("#userMenu>a").text
    print("登录成功")
except:
    print("登录失败")
    a = driver.switch_to.alert
    print(a.text)                # 打印文本
    a.accept()                   # 点击确定

# 退出程序
    driver.quit()

五: 思考

返回数据
返回原则:越简单越好,越简单越容易判断。
返回内容: 空值、True、False、词语、等等。
 
原文地址:https://www.cnblogs.com/huafan/p/10070227.html