用faker做假数据,方便测试|Python 主题月

1,209 阅读2分钟

本文正在参加「Python主题月」,详情查看 活动链接

前言

image.png

其实这事我不是不想拿出来写的,毕竟感觉自己也没做太多事情。

结果,Python主题月的活动,被测试同学看见了,说上次你帮我解决的问题为啥不更一篇文章呢?

我回答道,因为没有太多的技术含量呀。

测试同学听见了我回答,反驳道,也是经验和成果,快,给爷写,Python的代码我发你。

于是就有了这么一篇。

需求

其实需求就如上面截图所示啦,就是需要做大量的假数据,但是又不知道该如是好的测试同学问了搞iOS开发的我。

因为有的时候,我会考虑自己faker一些数据,通过Moya做一些简单的数据调试,所以对这个还算一知半解。

src=http___i0.hdslb.com_bfs_article_1b9a31796601c22a75b5acfd3694d8cd30cd8c61.png&refer=http___i0.hdslb.jpeg

其实我是对金闪闪对红A说的那句话很深刻——你就是个faker!

所以你看,多了解ACG知识对于思维联想还是有作用的吧,大雾XD

上代码吧

所以废话不多说,直接上代码吧:

import faker
import time

def fakeData():
    fake = faker.Faker(locale='zh_CN')

    jasperId = ["101842918", "101200123", "101842000", "1112311342", "123422323"]

    date = "20210318"

    start = time.time()
    for i in range(len(jasperId)):
        # 这里举例子,没有做100w条,合计做5w条数据
        for j in range(10000):
            iccid = fake.random_number(digits = 20)
            sim = fake.random_number(digits = 11)
            msisdn = "86" + str(sim)
            imsi = "4600" + str(sim)
            string = jasperId[i] + "\t" + date + "\t" + str(iccid) + "\t"+ imsi + "\t" + msisdn + "\t" + "10\n"

            with open ("esim.txt", "a+") as fp:
                fp.write(string)
    totalTime = time.time() - start
    print("运行时间:{}".format(totalTime))

if __name__ == "__main__":
    fakeData()

我顺便也收集了一下运行所用的时间:

image.png

接近9s的时间,做了差不多5w条数据,效率还算不错吧。

代码我是直接找测试同学给我的,其实我觉得那么多for循环,使用lamada难道不香嘛?

Faker的其他使用与扩展思考

上文提到过Swift中Moya的TargetType协议用有一个sampleData,我们可以通过将faker框架下生成好的数据,最后转成Swift中的Data,以便于做测试。

public protocol TargetType {

    /// The target's base `URL`.
    var baseURL: URL { get }

    /// The path to be appended to `baseURL` to form the full `URL`.
    var path: String { get }

    /// The HTTP method used in the request.
    var method: Moya.Method { get }

    /// Provides stub data for use in testing.
    var sampleData: Data { get }

    /// The type of HTTP task to be performed.
    var task: Task { get }
    
    /// The type of validation to perform on the request. Default is `.none`.
    var validationType: ValidationType { get }

    /// The headers to be used in the request.
    var headers: [String: String]? { get }

}

另外,我们可以在本地起一个自己的后端服务,用于调试App的网络请求。

抑或将数据上传到专门的Mock网站中,通过Mock网站的Api去做网络请求调试。

参考文章

Python库——Faker

别再手工造假数据了,faker了解一下