【问题标题】:How to test a python method's capability of handling 2 request at a time?如何测试python方法一次处理2个请求的能力?
【发布时间】:2012-11-20 09:23:23
【问题描述】:

_createAccount() 方法采用以下两个参数

def _createAccount(self,username,emailID):
    <statements to create account with respect to received emailID>

需要使用 unittest 测试此方法,即使用单个测试方法我想一次发送两个具有相同 emailID 和不同用户名的请求。 这两个请求之一必须获得响应,就像已经使用此 emailID 创建的帐户一样。 如何通过单元测试发送并行createAccount requests

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    我猜这段代码将在网络应用程序中运行,因此可以一次处理多个请求。

    一种方法是在测试中创建线程,在不同的线程中运行该方法并检查结果,但这有很多警告。一旦并行执行线程,执行顺序就不再是确定性的,而是取决于调度程序,可以认为或多或少是随机的。这意味着即使您的方法在某些情况下失败(使用精确的订单或执行),也无法确保能够重新创建这些情况。换句话说,通过测试不会告诉您任何有关方法有效性的信息。

    对于这种同步问题,您必须编写代码以确保您不希望发生两次的事情不会发生。为此,您需要确保您的创建/验证代码是原子的。

    例如,如果您使用的是 sql 数据库,您可以在 username 或 emailID 列上指定唯一性约束,这样第二个请求就会失败(sql 事务是原子的)。在其他情况下,您可能希望使用锁来确保只有一个线程正在执行“检查是否存在,如果不存在则创建”部分。

    【讨论】:

    • 谢谢,但是由于我使用的是 MongoDB,并且我使用 lock() 用户定义的方法来获取第一个请求,reject next requestnotify already registered message 它工作得很好,我用其他两个终端进行了测试通过同时发送请求。我想用单一方法/单元测试方法检查,这可能吗
    • 您可以使用线程(docs.python.org/2/library/threading.html)并行执行多个代码,但正如我所说,它可以确认它在某些情况下有效,但不能证明它在每个情况下都有效时间。
    猜你喜欢
    • 2020-07-12
    • 2019-03-30
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2021-12-17
    • 2019-07-18
    相关资源
    最近更新 更多