当前位置: 首页 > 科技观察

进阶Python,从写Python函数开始

时间:2023-03-19 19:37:39 科技观察

看懂十行代码,还不如自己写一行!精通代码的最好方法是能够通过代码解决工作中的实际问题,比如完成UI自动化测试、界面测试、创建测试数据、搭建测试环境、清理数据环境等等。在上述场景中,我们可以先将要解决的问题封装成一个函数。比如我用ui自动化登录,我可以把登录的几行代码封装成一个函数login(p_user,p_pwd)。对于接口测试,常用的get和post方法封装成get(p_url)和post(p_url,p_data)。下面我将详细讲解python中关于函数的基础知识。最后,我将以百度搜索selenium为例,讲解在自动化测试中如何将具体的服务封装成方法来实现代码复用。相信每个人都会有所收获!函数基础函数的本质是代码复用,在面向对象中函数被称为方法。Python提供了许多内置函数,例如print()。我们也可以自己创建函数,称为用户自定义函数。以下是函数定义的简单规则:函数代码块以def关键字开头,后跟函数标识符名称和圆括号()。参数在括号之间定义。函数内容以冒号开头并缩进。return[expression]终止函数,可选地向调用者返回一个值。不带表达式的返回等同于返回None。例如:deffunc():print("functioninstance")func()输出结果为:函数实例函数的参数形参和实参定义一个带参数的函数,如下:deffunc_para(p_str):print(p_str)在函数func_para中,p_str为formalparameter,即形参,用于接收调用函数时传入的参数。这是你通过的。实际参数是实际参数。调用该函数时,Kevin作为实际参数传递。如果传递了Mike,则Mike也是实参。实参传递给函数后,会在函数中赋值给形参。参数Kevin赋值给函数,即func_para("Kevin"),输出结果为Kevin将实参Mike赋值给函数,即func_para("Mike"),输出结果为Mike函数的返回值。运行该函数的调用者将获得一个值。首先,所有函数都有返回值。如果程序员没有指定返回值,默认返回None。例如:deffunc_return(p_str):returnp_strstr=func_return("Kevin")print(str)运行结果Kevin函数高级用法以上就是python中函数最基本的定义,相信大部分同学都知道,下面我来介绍一下接下来给大家介绍下python中函数的一些高级使用参数的默认值Python允许我们为函数的形参设置一个默认值。如果没有参数被调用,默认值是统一的。deffunc_default(name='kevin'):print("Thenameis"+name)func_default()func_default("mike")output:thenameiskevinandthenameismike关键字参数关键字参数可以让你忽略参数位置的函数,需要以键值对的形式指定参数对应的参数。deffunc_key(name,age):print("Hello"+name+",youageis"+age+"!")func_key(age='38',name='kevin')output:Hellokevin,你的年龄是38!不定长参数有时我们需要允许用户提供任意数量的参数。函数的形式参数可以用星号接收。调用函数时无论传入多少个实参,都会被收集到形参这个变量中,形参的类型是一个元组。例如:deffun_unfixedlength_1(*args):print(args)fun_unfixedlength_1('kevin','38','67674297')output('kevin','38','67674297')还有一个带两个星号的正规的parameter用于以键值对的形式接收实参,传入函数的类型为字典。deffun_unfixedlength_2(**args):print(args)fun_unfixedlength_2(name='kevin',age='38',qq='67674297')输出{'name':'kevin','age':'38','qq':'67674297'}匿名函数匿名函数不需要经过正常的函数定义过程,可以直接定义一个简单的函数并将函数本身赋值给一个变量,这样这个变量就可以像函数一样被调用,在python中你可以使用lambda关键字来声明和定义匿名函数。例如,lambda_demo=lambdafirst_name,last_name:first_name+""+last_namename=lambda_demo('kevin','li')print(name)输出kevinli函数的实际应用。最后结合ui自动化测试给大家举一个测试工作中功能的实际例子。应用。我们以百度搜索的selenium为例。selenium的核心代码如下:driver.get("https://www.baidu.com/")driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys("selenium")#在输入框中输入seleniumdriver.find_element_by_id("su").click()#点击搜索按钮备注:我的头条有很多文章讲解selenium应用的具体方法,这里不再赘述。可以参考:Java和Python在Selenium3中的应用一文。Selenium原理场景精析:由于搜索关键词千变万化,所以搜索动作是固定的,即:打开百度网页>在输入框输入关键词>点击百度搜索按钮。所以我们可以把这个场景写成一个函数,用一个函数来处理各种关键词搜索的需求。核心代码实现如下:defbaidu_search(p_key):driver.get("https://www.baidu.com/")driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys(p_key)#输入框输入seleniumdriver.find_element_by_id("su").click()#点击搜索按钮如果你想使用该功能来检查你是否找到了你需要搜索的关键字,那么你可以改进该函数,如果在搜索结果页面的文本中出现“百度为您找到*相关结果”的文字,证明搜索关键词返回True,否则返回False,如下图:改进后的代码方法如下:defbaidu_search(p_key):driver.get("https://www.baidu.com/")driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys(p_key)#在输入框中输入seleniumdriver.find_element_by_id("su")。click()#点击搜索按钮time.sleep(3)try:result=driver.find_elements_by_class_name("nums_text").get_attribute('value')#获取搜索结果的统计值,默认为:百度查找相关resultsforyouAbout...ifre.match('Baidufindsabout.*resultsforyou',result)isNone:#通过正则匹配,返回NonereturnFalseelse:returnTrueexceptNoSuchElementExceptionase:returnFalsereturnTrue