首页 > 编程语言 >进阶Python,从编写Python函数开始!

进阶Python,从编写Python函数开始!

时间:2023-09-27 11:02:28浏览次数:49  
标签:进阶 Python 函数 driver func 编写 find def name


好多同学都有这样的疑惑,我学习了python的基础语法,那么具体应用该从哪里入手呢?首先大家要确定,代码必须用起来才能越来越熟练!读懂十行代码不如自己亲自上手遍写一行!代码想熟练最好的方法就是能够通过代码解决工作中的实际问题,例如完成UI自动化测试、接口测试、创建测试数据、构建测试环境、清理数据环境等等。上述这些场景我们都可以从把要解决的问题封装成函数开始,例如我用ui自动化进行登陆,可以把登陆的几行代码封装成函数login(p_user,p_pwd),做接口测试可以把常用的get和post方法封装成 get(p_url)和post(p_url,p_data)。在这里我会详细的讲解python中关于函数的基础知识,最后以selenium 进行百度搜索为例来讲解自动化测试中如何把具体业务封装成方法实现代码复用,相信大家一定会有所收获!

进阶Python,从编写Python函数开始!_赋值

函数基础知识

函数的本质就是代码复用,在面向对象中把函数称为方法。Python提供了许多内建函数,比如print()。我们也可以自己创建函数,这被叫做用户自定义函数。以下是函数定义的简单规则:

函数代码块以def关键词开头,后接函数标识符名称和圆括号()

圆括号之间用于定义参数。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None

例如:

def func():

       print("函数实例")

func()

输出结果是:

函数实例

函数的参数

形参和实参

定义一个带参数的函数,如下:

def func_para(p_str):
       print(p_str)

在函数func_para中,p_str就是一个形参,也就是形式参数,是用来接收调用函数时传入的参数,你传的是什么它就是什么。实参就是实际参数,在调用函数的时候,传递是Kevin,那么Kevin就是实参,传递的是Mike,那么Mike也是实参,实参传递给函数后,会赋值给函数中的形参

把实参Kevin,赋值给函数,即func_para(“Kevin”),输出结果是Kevin

把实参Mike,赋值给函数,即func_para(“Mike”),输出结果是Mike

函数的返回值

调用方运行函数会得到一个值。首先说明,所有的函数都是有返回值的,如果编程人员没有指定返回值,那默认会返回None。

例如:

def func_return(p_str):
    return p_str
str=func_return (“Kevin”)
print(str)
运行结果
Kevin

函数高级用法

以上是python中函数最基础的定义,相信绝大多数同学都知道,接下来我会给大家介绍一些在python中函数的高级用法

参数的默认值

python允许我们给函数的形参设置一个默认值,不传参数调用的话,就统一默认是这个值。

def func_default(name='kevin'):
      print("名字是"+name)
func_default()
func_default("mike")
输出:
名字是kevin
名字是mike

关键字参数

关键字参数让你可以不用考虑函数的参数位置,你需以键值对的形式指定参数的对应形参。

def func_key(name,age):
       print("你好"+ name+", 你的年龄是"+age+" !")
func_key(age='38',name='kevin')
输出:
你好kevin, 你的年龄是38 !

不固定长度参数

有时候我们需要允许用户提供任意数量的参数,函数的形参可以带个星号来接收,不管调用函数的时候传递了多少实参,都将被收集到形参这个变量当中,形参的类型是元组。例如:

def fun_unfixedlength_1 (*args):
        print(args)
fun_unfixedlength_1 ('kevin','38','67674297')
输出
('kevin', '38', '67674297')

还有一种是带两个星号的形参,用于接收键值对形式的实参,导入到函数中的类型是字典。

def fun_unfixedlength_2 (**args):
      print(args)
fun_unfixedlength_2(name='kevin',age='38',qq='67674297')
输出
{'name': 'kevin', 'age':'38', 'qq': '67674297'}

匿名函数

匿名函数就是不用走正常函数定义的流程,可以直接定义一个简单的函数并把函数本身赋值给一个变量,使得这个变量可以像函数一样被调用,在python中可以用lambda关键字来申明定义一个匿名函数。例如

lambda_demo = lambda first_name,last_name : first_name + " "+last_name
name = lambda_demo('kevin','li')
print(name)
输出kevin li

函数实际应用

最后我结合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")  #输入框输入selenium
driver.find_element_by_id("su").click()  #点击搜索按钮

备注:我的简书中有很多文章讲解了关于selenium应用的具体方法,在这里就不在赘述了。可以参考:

一文搞定Java和Python在Selenium3中的应用

Selenium原理精讲

场景分析:由于搜索的关键字是千变万化的,而进行搜索的动作是固定的,即:打开百度网页>在输入框输入关键字>点击百度一下搜索按钮。所以我们可以把该场景编写为函数,用一个函数来处理进行各种关键字搜索的需求。核心代码实现如下:

def baidu_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)  # 输入框输入selenium
    driver.find_element_by_id("su").click()  # 点击搜索按钮

如果大家想通过函数来检查是否找到了需要搜索的关键字,那么可以对函数进行改进,如果在搜索结果页面中出现了“百度为您找到相关结果约*个”的文字证明搜索到了关键字返回True,否则返回False,如下图所示:

 

进阶Python,从编写Python函数开始!_python_02

改进后的代码方法如下:

def baidu_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)  # 输入框输入selenium
    driver.find_element_by_id("su").click()  # 点击搜索按钮
    time.sleep(3)
try:
       result=driver.find_elements_by_class_name("nums_text").get_attribute('value') #获取搜索结果的统计个数值,
                                                                                                               # 默认是:百度为您找到相关结果约...个
       if re.match('百度为您找到相关结果约.*个', result)is None:  #通过正则进行匹配,没匹配到正则返回None
           return False
       else:
           return True
    exceptNoSuchElementException as e:
           return False
    return True

标签:进阶,Python,函数,driver,func,编写,find,def,name
From: https://blog.51cto.com/liwen629/7621693

相关文章

  • 测试同学必须熟悉的python模块
    测试同学在进行python的面试过程中,必问的问题是你最常用的python模块有哪些?这些模块解决了你工作中的哪些问题?在这里我把测试同学在实际工作中常用的py模块进行了汇总,本文编写的目的是对各个模块的功能进行概要介绍并没有提供具体api的使用方法,如果大家想要深入了解各个模块api的具......
  • MySQL进阶篇:第二章_二.二_索引结构
    2.2索引结构2.2.1概述MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:索引结构描述B+Tree索引最常见的索引类型,大部分引擎都支持B+树索引Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范......
  • MySQL进阶篇:第二章_二.一_索引概述
    2.1索引概述2.1.1介绍索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。2.1.2演示表结构及其数据如下......
  • MySQL进阶篇:第一章_一.五_MySQL存储引擎选择
    MySQL存储引擎选择在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。InnoDB:是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作......
  • Python高频面试题——装饰器(带大家理解装饰器的本质)
    装饰器概念装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限验证等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可......
  • Python高频面试题——生成器(最通俗的讲解)
    生成器定义在Python中,使用了yield的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在......
  • playwright python环境运行报错 ImportError: DLL load failed
    网上建议网上好多文章介绍playwright的环境搭建,用以下两条语句即可完成pipinstallplaywrightplaywrightinstall安装完毕后,尝试执行一段经典的pythondemofromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.launch()page......
  • Python高频面试题——迭代器和可迭代对象
     无论是面试测试还是运维涉及到python编码岗位时,迭代器和可迭代对象都是绕不开的一个问题,本文对这两个概念进行重点讲解,本文从什么是迭代讲起,然后介绍迭代器和可迭代对象二者的区别,最后通过for循环和自定义迭代器来加深读者对这两个概念的理解,只要认真阅读完文章,相信一定会帮助到......
  • Python爬虫-爬取百度搜索结果页的网页标题及其真实网址
    共两个依赖的需提前安装的第三方库:requests和bs4库cmd命令行输入安装requests库:pip3install-ihttps://pypi.douban.com/simplerequests安装bs4库:pip3install-ihttps://pypi.douban.com/simplebeautifulsoup4 本微项目源文件下载地址:https://wwuw.lanzouj.com/i1Au51......
  • Python 图片并行下载
    需求:有大量图片的url需要将其快速下载到本地技术点:采用编写并发代码的库asyncio以及基于asyncio实现的HTTP框架aiohttppipinstallasynciopipinstallaiohttp代码如下:importjsonimportosimportrequestsimportaiohttpimportasyncioimage_save_dir="images"......