With over 11 years of experience as an IT Professional, I thrive in the dynamic world of technology, where change is the only constant. My career journey has been marked by a relentless pursuit of improving software functionality and efficiency.
My technical prowess spans multiple languages, including Java, JavaScript, and C#.Net, as well as proficiency in automation tools like Postman and Jenkins, and Agile tools such as Jira and TestRail. I bring a unique blend of skills that makes me a versatile asset in the IT landscape.
My approach to software development is characterized by a sense of urgency and a willingness to shoulder increasing responsibilities across all project phases – from analysis and design to implementation and deployment.
Senior Software Quality Engineer
Helmerich & Payne TechnologiesSenior Software Quality Engineer
Ciena TechnologiesSoftware Quality Engineer
Keysight TechnologiesCucumber

Rest Assured

Cypress

TestNG

Postman

Newman
.png)
Jenkins

Git
Jira

TestRail

TFS

TeamCity

Bitbucket
Let me understand more about your background by giving a brief introduction. Yes, I can surely do that. So, initially, I started my career at Resigent Technologies, which later became Keysight Technology after a split. And I was a part of the oscilloscope team. And over there, I was working with electronic equipment. Our oscilloscope used to record the electronic signal coming from the hardware, and we automated those and used tools to test them well. I was using C# and we were also using ChromAPPS for testing. After that, I moved on to Vienna Technologies. There, I was working in the telecom domain. And over there, I was working on a software called a network management system. We managed the software end to end for layers 0, 1, 2, and 3. I was in charge of layers 0 and 1, and sometimes supported older networks, including terminal networks. We were working on that. In that time, the software was created on the Microsoft infrastructure. We used REST API automation with Postman, Newman, and TeamCity to automate all the microservices individually. I was mostly in charge of automating layer 0 services, plus summary, backup, and restore using the REST API itself. Then I moved to my current company. So, here, they've taken it to the next level. Like, they have microservices as well, and they also have a micro front-end infrastructure in place. If a particular front-end is not working, like CNI used to have one microservice for the whole front-end. If there's an issue with the front-end, the whole UI used to crash. But in this case, if a part of your front-end is not working, your UI won't crash. You can go ahead without any hassle, and that part can be fixed later as well if it's not important. I mean, even if it's not critical, other functionality will still be supported. Here, I'm using JavaScript, and Cypress for UI automation. I've started the Cypress automation here, and I've created the basic framework and everything was done by me. All the creative commands and everything were created by me. Now we have a team of five. So, basically, they'll help me, and they also contribute towards the project. And then now I'm currently working on the REST API Automation. For REST API Automation, we're using REST Assured, Java, and the Cucumber framework. So now we have made it a BDD framework for the REST API. We've almost completed three projects, and we're planning to move ahead with other projects as well. So that will be all from my introduction.
I can walk through how to create a test scenario for a feature that involves complex input options. Here's the corrected transcript: Can you walk through how I would create a test scenario for a feature that involves complex input options? So, first of all, I will check what kind of input it takes. Initially, I thought, suppose I have a text box or let's, suppose we have to create that complex level of a high scientific calculator. It should take cos theta, tan theta, and everything. Like, text is also allowed, and theta is also allowed. Some special characters are allowed. So, I will make sure that whatever it is supported, like, obviously, plus, minus, multiplication, division, and all numbers are supported. But with that, some trigonometry functions are also supported. Not every text is supported, but, like, sin theta, cos theta, it will be supported. Log will be supported. So, I will make sure that I will write post-test cases that what keywords will be selected and what will not. Suppose our user enters not instead of tan theta, it writes pi theta. And then by its misspelling mistake, that should not be allowed to the user. And, obviously, I will try to input something that I suppose I'm it can return only 6-digit numbers, and, definitely, I will try to multiply two numbers. Those, multiplication will be more than 16 digits. And then I will definitely want to check that what was the output. And, I will also check that what is the maximum number can be inputted, and, I will definitely try to. I will also check the decimal values. Like, suppose it can return up to 4 different decimal values, then definitely I will try to check that as well. Like, I will try to check with 4 minimum 4 digits, and, also, I will try to surpass that, like, n plus 1. So, like, using 0 multiplying 0 1 0 0 1 into 0.001 so that we get six-digit decimal value. And then I will definitely check. And apart from that, I will try to enter other special characters which are not part of the basically calculations of the calculator, like, add rate and everything because these are not related to the calculator. And, these are the scenarios, and, what I can do is there. I have to. I think that will be it from my side. Yeah. I think I have covered all the I will check the characters. I will check the special characters, like, the minus, everything. I will check the words as numbers, words. Words are specific. Pick only cos. The class should be 10 and nothing else. Logs will be there, and these are the things like trigonometry terms, and this should be there.
Implementing continuous testing in DevOps involves several key strategies. The test life cycle typically consists of test planning, test case creation, test execution, and defect tracking. To implement a continuous testing strategy, we must have everything in place, starting with the gate, then the node for UI automation, followed by Cypress, and finally, the repository. Once the repository is updated, we verify the test cases after reviewing the PR, and everything runs on a nightly basis. Once the transactions are complete, we have two ways to handle test cases. For UI automation, we link the test cases with test trail test cases. If those test cases fail, a new suit is created, and the tests are marked as failed in our test trail repository, which is linked to our automation. We then assign the failed test cases to engineers who investigate the issue. If there are multiple test cases failing due to a single issue, the engineers resubmit a defect and mark the reasons for failure. We then block the test cases that fail due to a known bug and run the other test cases continuously. We use Kubernetes secrets to store data and create a new system for testing to avoid environment issues. We also integrate Jenkins to run tests on a branch basis, allowing us to run tests on the test, stage, UAT, or production environment. Our strategy for continuous testing using the DevOps test cycle life cycle involves creating regression suites that run on a nightly basis, using PMCT and Jenkins for UI and API automation, and linking test cases with test trail test cases. We assign failed test cases to engineers, who investigate and resubmit defects with reasons for failure. We block test cases that fail due to known bugs and run other test cases continuously.
Do you follow to ensure comprehensive test coverage in manual and automation testing? Comprehensive coverage is what we are calling, for manual and automation testing. What we have is segregated into two parts. One is functional testing, and another one is non-functional testing. So, which goes to performance testing and some UI testing, which is not related to the functional part. That kind of testing is done separately. For functional testing, generally, what we do is, initially, state that your UI should not take too much time. And suppose you are performing some function, but it is taking a longer time to reply at the UI, and the UI is buffering for a long time. That part is taken care of as a part of performance testing. But for automation, we are using JMeter here, which is taken care of by one of my team members. Sometimes I help him. But, mostly, he takes care of that. And, apart from that, for the functional part, what we do is, we test the UI first, based on what was discussed in the part of HLD and the Apex. Once the UI test cases are complete, we go directly into using the HLD and epic. And after that, if we have any doubts, we generally discuss with the POs to understand their expectations. We write thorough test cases for functional testing according to them, and we also segregate our test cases to ensure that all the main functional test cases are discussed with the POs. We generally automate them as part of UI and API testing code. And we generally follow the workflows using the API automation. But sometimes we also do that in the part of UI automation engine because Cypress has the capability to run API and get the values. But, yeah, we are mostly doing it as part of API automation. So, apart from that, what we are doing as part of manual testing is segregating our smoke testing and sanity test cases differently. We will mark, like, p 1, p 2, p 3 priorities in all the functional test cases. Once those are done and other strategies are used, like, we use the boundary value technique. Suppose there is a calculator, we generally use the boundary value and it is supposed to take 10 values. We can detect it by trying to put values less than 0 and values greater than 10. And if boundary values, equivalence, and decision tables are there, we use those techniques to write the test cases. We use those techniques for writing the manual test cases. And for automation, we generally prioritize those test cases. Once the priorities are done and we discuss with the POs, generally. And once that is done, we mark them as automation needed. And once those are done, we try to automate all the priority test cases. After that, we pick the p 2 and p 1 test cases. We only automate the priority test cases, p 1, p 2, and p 3.
Since I have mostly worked on the desktop application and the web application, so I don't have much experience with the mobile application. But I will still try to answer that with my experience only. However, I don't have much experience to draw upon. So how would you approach testing the mobile app compatible version. Yeah. So what I would do is I would have at least three different types of machines, different types of mobile devices, which, like, sometimes Google takes the original, basically, Google Pixel has the original Android. And suppose I wanted to test our software on that, and sometimes other vendors are also there, like Samsung Mobile, which actually modifies their operating system over the Android. So I would take at least two of them, And I would also check which is the most popular mobile, which is, like, I would say, the one plus is there. So they have some extra security features, and we have also seen that there are some other, high-end mobiles from Samsung as well, which are providing extra features. And then now folding mobiles are also there from the Samsung. So I would make sure that at least different types of categories of the mobiles I have at least in the part of simulation at least which are currently available in the market. And I would verify with this. So I would, keep on changing the system version. Like, I would suppose Marshmallow is supported. I would check with that. I suppose Kit Kat is supported. I would definitely install on those mobiles, and I would check with that. And I would also make sure that, like, UI displays are also there. The project security check is added on top of it, like, Evan Prose is adding and high-end mobiles from the s series, having Samsung. So I would definitely make sure that all the securities have been handled properly with the change in the version. And suppose a new version is launched, then definitely, I would check those which are the security features and every feature which is dependent on this. I would make sure that those are working fine on that.
We used JMeter to implement the function to validate server response times within defined learning performance testing. We paged and deleted fire over the API from JMeter, which generally returns the response time taken by the API to return. Even if you want to check via UI automation is also an option. We are using Cypress here. If you click on a button, it will give you the response time, which is how much time it takes for the UI to get the data from the backend. You can also get that data from the EUI and automate accordingly. That will be all from my side.
Code Java code aims to apply singleton design pattern. There seems to be a potential issue that prevent it from working as a proper Can you identify the problem and suggest a fix? Data connected. Return instance. So, basically, this is I understand built in is implemented. But if, only a task will be created when the task is done. That is the proper reason of that. And I think, your first instance is created as private, but I don't, I think it's so it will be I think the get set getter setter should be placed so that we can get the instance in the return method. That's I think I am getting it. And, one can be solved for the instance because the instance is private initially, but we are trying to return in the public static function. Obviously, static will be called And, Yeah. That is only thing I can think of currently. The way it is looking like the
There is a logic error that calls the test to solve us even if it is supposed to be. Get the available driver phone. Find one by n one dot click. Yeah. So I think what I can understand from here is an exception. Obviously, I have not worked in Python, but what I can understand from my experience is that an exception is passed, and it is basically printing the exception message. Instead, we can obviously print a test failed and then print our message. That will be first because an exception is used to show the exception on the print test pass. It has a test passed. So that I think can be fixed because it is something which is not looking right to me. So that can be fixed here. Yeah. So that is that is that will be from my side. Let's just change the test pass to test fail and show the exception, which will give the user reason why it is failing.
Writing test scripts that are adaptable to the changes in the application interface. So, what I am doing here is in Cypress, which is currently. So, our software keeps changing on a day-to-day basis sometimes because it is also new. So, obviously, we know that initially, your UI cannot be certain because you get feedbacks from the customer regularly. And whatever you plan, it is going to change. So, what we do here is we are using page object modules, and we are using that. So, what I have done is we have created a separate class for the selector, like, cy.get and then CSS selector, and then we are calling it, and then we are checking it. Suppose, this is the side like, suppose I will have to check the upload. So, what we are doing is we are checking it in Cypress, it gives you the flexibility to write your whole test and check in one line. But, what we are doing is, because we know that your CSS selector can change in the future and the UI interface can also change, so, what we have done is we have put everything in the page object file and then we are calling it in the test file. So, what we have done is we have put every CSS selector under one file, and then we are checking on it. Like, upload's name, we are expecting that it will not change. But, its position can change. So, what we have done is, whatever changes are done, so, generally, our team informs us that these are the changes we are expecting. So, wherever there are the changes, we change the page object file and page object model file, and it automatically starts reflecting in our UI, like the check icon and the text, which is upload, so, that will always match. So, that's why we are expecting that the test will always pass if the CSS selector is right and updated. So, that's why we have put it in the other file. So, that is one thing what we have done. And, our approach is, generally, we keep contacting like, we are working in a scrum team, so, we generally keep a check with the customer, like, what are the new changes they are coming with. And we try to write loosely coupled CSS selectors. This is the word in the coding, but, we're generally not writing the whole CSS selector. We are managing in a way that it should be like in this. Like, in a shopping cart, you are expecting that cart. There should be a class cart, and then you have items under that. So, we write such in such a way that, obviously, they will move the cart here and there, but, the items will be always under the cart. So, we write our CSS selectors like that thinking that only because, that is the most logical way to write it. So, that is another approach we take. And, basically, there are three approaches which I have already mentioned. One will be, obviously, going logical with the CSS selector, then we are talking with the scrum team, and then we have also managed our code in such a way that it can be changed rapidly using the page object model.
What is the approach to automating security testing? It's free for the mobile apps.
I'll explain the methodology you would apply to migrate testing to ensure particular operation, functional post migration. Explaining a methodology you need to apply. Migrating. Okay. So after migrating, definitely, I would like to check backups and restores. So, first, that will be the first thing I will check. And, obviously, I will also check georegional settings. Suppose one thing is failing, I will definitely want to check that. Suppose one of the servers is failing on our side, then the georegional settings should work and the Mumbai server should work or the Spain worker server should work for us. And, obviously, I will check the high availability. Suppose we have migrated from one system to another, and we have migrated. So then I will definitely check that I will release there. Like, we have a three-cluster system, and we are expecting that if one is down or busy, then the other two should take care of the load. So that will be one thing I will definitely look into. These are some things which I am initially going to look into so that our critical function should always work. And, apart from that, what I will do is create our P1 test cases, and we will go for a regression. It totally depends upon the size of the project. So, if we have already automated P1, P2 test cases, then definitely I will run our test cases on those. And I will still make sure that I will ask our engineers to go for the regression on P1, P2, P3 test cases. And I will try to identify which are the areas that are mostly impacted. So, after discussing in the scrum, if we have input, so definitely we will put extra time on that. So that will be one thing. And, obviously, if we have time, like, suppose we have six months to check these migrations, then what we will do is we will write an automation suite or UI suite, and we can write a UI automation suite, which can be possible with Cypress as well. So we will take all the screenshots of every page, and we can compare with the post-migration as well. So sometimes this is also helpful. But, this is not suggested because it's better to have a proper automation suite, which is running on one server. It should work on the other server. So that will be all from my side.