第九期 python 面向对象编程、unittest、pytest 测试框架-20190427

关键知识点

  1. 类的定义里面,如果没有 "def init(self)"方法, 等同于下面
    def __init__(self):
        pass
  1. 继承类里面的访问方法:
    先子类,后父类

  2. 类变量,实例变量

  3. 静态函数,类函数

问题

  1. 没有__init__文件可以导入

常见问题

 如果看到模块无法导入,而模块真实存在,检查点:1. 这个目录有没有__init__.py,  2. src在不在sys.path, 通过答应print(sys.path)来做debug 
ImportError: No module named testimport
import sys
sys.path.append('yourdir')

unittest编写规范:

测试模块首先 import unittest
测试类必须继承 unittest.TestCase
测试方法必须以“test_”开头
模块名字,类名没有要求

pytest 编写规范

测试文件以 test_ 开头(以 test 结尾也可以)
测试类以 Test 开头,并且不能带有 init 方法
测试函数以 test
开头

pycharm里面配置unittest 作为testrunner

pytest 插件:

pytest-sugar==0.9.2
pytest-rerunfailures==5.0
pytest-ordering==0.6
pytest-instafail==0.4.1
pytest-datafiles==2.0
pytest-assume==1.2.2
allure-pytest==2.6.2
pytest==3.8.0
selenium==3.4.1
Pillow==5.4.1
requests==2.18.4

pip install pytest-sugar

pytest参数化:

@pytest.mark.parametrize(“x”, [(1),(2),(6)])

pytest 重新跑失败的测试用例

pytest --reruns 3 src/testcases/api/test_pyexample_rerun.py

作业

对下面测试方法使用pytest的rerun, 参数化方法来实现自动化测试

#! /usr/bin/env python
#coding=utf-8


import random

def bubble_sort(nums):
    for i in range(len(nums)-1):
        for j in range(len(nums)-i-1):
            if nums[j] > nums[j+1]:
                nums[j], nums[j+1] = nums[j+1], nums[j]
    return random.choice([nums,None,10])