python测试-并发测试基础-asyncio

协程,又称微线程,Coroutine。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。但是协程只有一个线程执行。python属于解释型语言(逐句执行),在特定场景下同步执行会造成阻塞(执行不下去),所以要引入异步执行(多条通道完成语言的解释)。
协程的使用不难,但是要真正掌握协程是非常困难的。本文将例举三种使用协程的方法,希望能够让更多的测试人能够使用上异步来提高测试效率,解决堵塞问题。有什么不懂的可以留言。
协程官方文档
第一种:

import asyncio
import time


async def test(sec, testNumber):
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))  #动作1
    await asyncio.sleep(sec)   #动作2
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), testNumber)  #动作3


async def main():
    task0 = asyncio.create_task(test(1, 0))
    task1 = asyncio.create_task(test(10, 1))
    await task0
    await task1


asyncio.run(main(), debug=False)

结果:

D:\python\python.exe D:/pythonProject/asyncio_lianxi.py
2020-12-31 13:54:45
2020-12-31 13:54:45
2020-12-31 13:54:46 0
2020-12-31 13:54:55 1

Process finished with exit code 0

图解:
python测试-并发测试基础-asyncio_第1张图片

第二种:

import asyncio
import time


async def test(sec, testNumber):
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))  #动作1
    await asyncio.sleep(sec)   #动作2
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), testNumber)  #动作3


async def main():
    # task0 = asyncio.create_task(test(1, 0))
    # task1 = asyncio.create_task(test(10, 1))
    # await task0
    # await task1
    await asyncio.gather(test(1, 0), test(10, 1))

asyncio.run(main(), debug=False)

结果:

D:\python\python.exe D:/pythonProject/asyncio_lianxi.py
2020-12-31 14:09:50
2020-12-31 14:09:50
2020-12-31 14:09:51 0
2020-12-31 14:10:00 1

Process finished with exit code 0

第三种:

import asyncio
import time
loop = asyncio.get_event_loop()


async def test(sec, testNumber):
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))  #动作1
    await asyncio.sleep(sec)   #动作2
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), testNumber)  #动作3


def main():
    list = [test(1, 0), test(10, 1)]
    loop.run_until_complete(asyncio.gather(*list))


if __name__ == '__main__':
    main()

结果:

D:\python\python.exe D:/pythonProject/asyncio_lianxi.py
2020-12-31 15:00:07
2020-12-31 15:00:07
2020-12-31 15:00:08 0
2020-12-31 15:00:17 1

Process finished with exit code 0

注意比较三种方式的不同点。思考这三种方式的怎么转换成自己想要的异步执行框架。
加油。

你可能感兴趣的:(自动化测试,并发,压力测试)