【问题标题】:Python newbie generate random stringsPython新手生成随机字符串
【发布时间】:2012-04-07 09:15:38
【问题描述】:

我最近开始使用 windmill 和 python 来运行我的 Web 应用程序的自动化测试。这是 windmill 通过记录我的事件自动生成的 python 脚本:

# Generated by the windmill services transformer
from windmill.authoring import WindmillTestClient
import string
import random

    def test_recordingSuite0():
        client = WindmillTestClient(__name__)

        client.click(id=u'input-999052296848829736')
        client.type(text=u'btsr65ejdfgdjdfg', id=u'input-999052296848829736')
        client.click(id=u'input-999052296848829736-1')
        client.type(text=u'dfgdbdfgdfgjdfgjd', id=u'input-999052296848829736-1')
        client.click(name=u'_u911175390904082714')
        client.select(option=u'1', name=u'_u911175390904082714')
        client.click(value=u'1')
        client.click(id=u'input-497945674625883994')
        client.type(text=u'dfgbhdfbgxcvbz3@asdfvsevsdf54.com', id=u'input-497945674625883994')
        client.click(name=u'_u969737303932735624')
        client.radio(name=u'_u969737303932735624')
        client.type(text=u'asdg9a7e0g57wn4bgwsdfhsdfhsdfhssdhsd', id=u'input-542327653202413691')
        #client.click(name=u'submit')
        #client.waits.forPageLoad(timeout=u'20000')

我对 python 完全陌生,我现在正在学习一些语法。但是有人可以帮我在各个字段中随机输入文本吗?

例如:第 2 行: 在一项测试中,我想要

client.type(text=u'LAKJSDOGUSDGSDGS', id=u'input-999052296848829736')

还有一个:

client.type(text=u'908374098afsDGSGS', id=u'input-999052296848829736')

(随机,不同)

谢谢!

【问题讨论】:

  • 如果您这样做,您如何确定您的 Web 应用程序看到的数据实际上与为测试运行生成的随机数据相匹配?你为什么要关心随机数据呢?

标签: python string random windmill


【解决方案1】:

在程序的顶部,您导入必要的模块,然后获得要放入随机字符串的字符列表:

import string
import random

CANDIDATE_CHARS = string.ascii_letters+string.digits  # lowercase and uppercase letters, and digits

在测试函数中,您创建一个随机的字母数字字符串,如下所示:

random_text = u''.join(random.choice(CANDIDATE_CHARS) for _ in range(16))  # 16 random characters
client.type(text=random_text, id=u'input-999052296848829736')

【讨论】:

    【解决方案2】:

    您正在寻找random 包。它有一个shuffle 方法,可以就地打乱列表。

    import string, random
    
    def get_random_string(length):
        chars = list(string.lowercase+string.digits)
        random.shuffle(chars)
    
        return "".join(chars[:length])
    
    for i in range(12):
        print get_random_string(10)
    

    字符串模块提供了一些方便的字符串,它们是string.uppercase、string.lowercase、string.digits,...您可以使用这些方便或编写自己的字符列表。 "".join(L) 将列表 L 的所有字母分开,因此您可以在一个字符串中获得字符序列。

    在你的情况下,你可以使用:

    client.type(text=unicode(get_random_string(20)), id=u'input-999052296848829736')
    

    【讨论】:

    • 这不起作用:问题不在于洗牌字符,而在于获取一串随机字符。此解决方案无法生成例如 1000 个随机字符的字符串。
    • 如果他需要那么多字符,他可以将chars 变量更改为适合他的chars*200 并随机播放。但在他的的情况下他不需要那个。
    • @jadkik94 你的函数是错误的,因为给定的字符只能在字符串中出现一次。虽然字符串仍然是“随机的”,但这个解决方案并不准确。
    • @NolenRoyalty 是的,但是通过更改字符列表(如chars*n),对于用例来说,这将是“足够随机的”......但你仍然是对的
    • @jadkik94 我认为 EOL 说它“不起作用”时有点过于苛刻,但特别是考虑到他更优雅、更随机的解决方案,我认为公平地说这不是t OP 想要的解决方案。尤其是创建这样大小的字符串会变得多么昂贵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多