测试开发之Python核心笔记(3):数值与随机数

3.1 数值类型

Python支持的数值类型有整型int、布尔型bool、浮点型float、Decimal。

type(100)  # 
type(1.0)  # 
type(True)  # 
type(False)  # 

这里要提一下,布尔型是只有两个值的整数。True对应1,False对应0。对于布尔型要从以下方面理解:

  • 有两个值True和False
  • 对于值为零的任何数字或者空集(空列表[]、空元组()、空集合{}、空字典{}),他们的布尔值都是False

3.2 算数运算

  • 加法+
  • 减法-
  • 乘法*
  • 除法/
  • 取余%
  • 幂运算**或pow
  • 取商和余数divmod
  • 四舍五入round
  • 绝对值abs
>>> 5+2
7
>>> 5-3
2
>>> 5*2
10
>>> 5/2
2.5
>>> 5%2
1
>>> 5**2
25
>>> pow(5,2)
25
>>> divmod(5,2)
(2, 1)
>>> round(1.314, 2)  # 保留两位小数,第三位四舍五入
1.31
>>> round(2.5)  # 值刚好等于两个整数中间时,得到举例最近的偶数
2
>>> round(1.5)  # 值刚好等于两个整数中间时,得到举例最近的偶数
2
>>> round(2.6)
3
>>> abs(-0.5)
0.5

3.3 位运算

将数值转成二进制后,按位操作。

  • 按位取反~
  • 按位与&
  • 按位或|
  • 按位异或^
  • 左移<<
  • 右移>>
>>> 30 & 45
12
>>> 30 | 45
63
>>> 30 ^ 45
51
>>> ~30
-31
>>> 3<<2
12
>>> 8>>2

3.4 数制转换

  • bin(),将十进制转换为二进制
  • oct(),将十进制转换为八进制
  • hex(),将十进制转换为十六进制
>>> bin(10)  # '0b1010'
>>> oct(9)  # '0o11'
>>> hex(15)  # '0xf'

3.5 比较运算

  • 大于>
  • 小于<
  • 等于==
  • 大于等于>=
  • 小于等于<=
  • 不等于!=
>>> 5>3  # True
>>> 5<3  # False
>>> 5==3 # False
>>> 5>=3 # True
>>> 5!=3 # True
>>> 5<=3 # False

3.6 decimal模块

普通的float型数据在运算时,是有误差的,python默认的是17位小数的精度,再长后面的数据就不准了。如果不能接受误差,可以使用decimal模块解决精确计算问题。

a = 3
b = 1
c = b/a
print(c)  # 0.3333333333333333

d = "%.30f" % (1/3)
print(d)  # 0.333333333333333314829616256247
e = Decimal(1)/Decimal(3)
print(e)   # 0.3333333333333333333333333333 ,默认28位,可调

3.7 random模块

这个模块很常用。

import random
import string

print(random.randint(1, 10))  # 产生 1 到 10 的一个整数型随机数
print(random.random())  # 产生 0 到 1 之间的随机浮点数
print(random.uniform(1.1, 5.4))  # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print(random.choice('tomorrow'))  # 从序列中随机选取一个元素
print(random.choice(['剪刀', '石头', '布']))
print(random.randrange(1, 100, 2))  # 生成从1到100的间隔为2的随机整数
print(random.sample('zyxwvutsrqponmlkjihgfedcba', 5))  # 生成5个字符组成的列表
print(''.join(random.sample(string.ascii_letters + string.digits, 8)))  # 从a-zA-Z0-9生成指定数量的随机字符
a = [1, 3, 5, 6, 7] 
random.shuffle(a)   # 将序列a中的元素顺序打乱
print(a)

说到随机数作为测试数据,Python中还有一个非常好用的产生随机数的第三方包Faker(https://pypi.org/project/Faker/)。安装方法是:

pip install Faker

它的功能特别强大,能够产生的随机数类型非常丰富,举几个例子:

from faker import Faker
# Faker.seed(4321)  # 随机数种子
fake=Faker('zh_CN')
print(fake.name())
print(fake.address())
print(fake.city())
print(fake.postcode())
print(fake.company())
print(fake.email())
print(fake.hostname())
print(fake.ipv4())

从名字可以看出产生的随机数的类型。

如果想要每次生成的随机数是固定的。可以提供一个随机数种子,这样相同的方法,总会得到相同的随机结果。

在使用Pytest测试框架的测试工作中,可以将faker制作成为fixture函数。例如下面的代码,在conftest.py文件中定义一个叫作faker的fixture函数,其中指定了locale是中国。

from faker import Factory

@pytest.fixture(scope='session')
def faker():
    return Factory.create('zh_CN')

测试函数中,就可以直接使用faker,在使用过程中,使用相同seed的faker,产生的随机数是一样的,比如下面的test_faker和test_something这两个测试函数中,相同方法产生的随机数是一样的。

def test_faker(faker):
    faker.seed(1234)
    print(faker.name(), faker.address(), faker.email())
    assert isinstance(faker.name(), str)


def test_something(faker):
    faker.seed(1234)
    print(faker.name(), faker.address(), faker.email())
    assert isinstance(faker.name(), str)


def test_something_else(faker):
    print(faker.name(), faker.address(), faker.email())
    assert isinstance(faker.name(), str)

你可能感兴趣的:(Python,python)